【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中的逻辑真或假可以用多种方式表示:

  • 如果将逻辑变量设置为以下任意一种:1ONYEStrueY或非零数,则逻辑变量为true
  • 如果将逻辑变量设置为以下任意一种:0OFFNOfalseNIGNORE、NOTFOUND、空字符串,或者以-NOTFOUND为后缀,则逻辑变量为false

BUILD_SHARED_LIBS是CMake的一个全局标志。因为CMake内部要查询BUILD_SHARED_LIBS全局变量,所以add_library命令可以在不传递STATIC/SHARED/OBJECT参数的情况下调用;如果为false或未定义,将生成一个静态库。

posted @ 2022-08-04 16:49  禅元天道  阅读(175)  评论(0编辑  收藏  举报