【CMake】用条件句控制编译
C++代码同上一篇文章《构建和链接静态库和动态库》,CMakeLists.txt的内容修改如下:
1 # 设置cmake所需的最低版本 2 cmake_minimum_required(VERSION 3.21) 3 # 声明工程名称和工程支持的编程语言 4 project(CmakeTest LANGUAGES CXX) 5 6 # 创建位置无关的代码 7 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 8 9 # 定义变量,控制是否生成动态库 10 set(USE_LIBRARY ON) 11 # 使用下面的代码可以在cmake-gui界面中提供一个复选框 12 # option(USE_LIBRARY "Compile sources into a library" ON) 13 message(STATUS "Compile sources into a library? ${USE_LIBRARY}") 14 15 # 控制add_library默认生成动态库 16 set(BUILD_SHARED_LIBS ON) 17 18 list(APPEND _sources Message.hpp Message.cpp) 19 20 if(USE_LIBRARY) 21 add_library(message ${_sources}) 22 add_executable(${PROJECT_NAME} main.cpp) 23 target_link_libraries(${PROJECT_NAME} message) 24 else() 25 add_executable(${PROJECT_NAME} main.cpp ${_sources}) 26 endif()
CMake中的逻辑真或假可以用多种方式表示:
- 如果将逻辑变量设置为以下任意一种:
1
、ON
、YES
、true
、Y
或非零数,则逻辑变量为true
。 - 如果将逻辑变量设置为以下任意一种:
0
、OFF
、NO
、false
、N
、IGNORE、NOTFOUND
、空字符串,或者以-NOTFOUND
为后缀,则逻辑变量为false
。
BUILD_SHARED_LIBS
是CMake的一个全局标志。因为CMake内部要查询BUILD_SHARED_LIBS
全局变量,所以add_library
命令可以在不传递STATIC/SHARED/OBJECT
参数的情况下调用;如果为false
或未定义,将生成一个静态库。