构建实例
跨平台项目要处理平台差异:宏定义、源文件选择、编译选项不同。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