构建实例

CMake 教程 · 第 7 章 · 7 次浏览

跨平台项目要处理平台差异:宏定义、源文件选择、编译选项不同。CMake 提供条件判断和平台变量。

平台判断

if(WIN32)/if(UNIX)/if(APPLE) 分支处理。WIN32 同时涵盖 Windows(64 位也真)。

宏定义

target_compile_definitions 定义宏,代码里 #ifdef PLATFORM_XXX 条件编译。

代码示例

# CMakeLists.txt(跨平台)
cmake_minimum_required(VERSION 3.10)
project(Crypto CXX)

if(WIN32)
    target_compile_definitions(app PRIVATE _WIN32_PLATFORM)
    add_executable(app src/main.cpp src/win_impl.cpp)
else()
    target_compile_definitions(app PRIVATE UNIX_PLATFORM)
    add_executable(app src/main.cpp src/unix_impl.cpp)
    find_package(Threads REQUIRED)
    target_link_libraries(app PRIVATE Threads::Threads)
endif()

# 代码里
# #ifdef _WIN32_PLATFORM
#     // Windows 实现
# #else
#     // Unix 实现
# #endif