(四)CMake编译选项

一、cmake、make的本质是编译选项的组织集合

本质上来说,makecmake都是协助你进行编译的工具,用户完全可以通过g++ gcc按照编译器要求来进行直接编译,只不过makecmake根据各自认为合适的组织规则方便我们进行编译管理罢了。如增加一个线程库:

g++ *.cpp -o -lpthread test

这是g++编译器要求的样子。所有包含头文件、库文件、打包和链接库等操作都通过-选项来完成。

make为了减少和整合编译逻辑,将一些例如打包ar操作封装在一个变量AR中;一些编译器专用的选项CXXFLAGSCPPFLAGS;有不同编译器和连接器变量名CCLD,总而言之,把一些选项按照一定的组织规则,放在一个变量,然后设计者通过这些分号类的变量,按照g++组织规则帮助用户完成编译。

cmake也是一样,出发点都是组织编译规则,让用户更为简单地进行程序编译。

二、cmake增加编译选项

2.1 变量的定义和使用

定义和作为参数时,变量名本身;使用内容时加上${}

  • 定义变量SET(OBJ_NAME xxxx)使用${OBJ_NAME}
  • 参数,则直接使用名字。如:aux_source_directory(./src DIR_SRC)
2.1 变量的种类

CMake共用七种变量,如下所示[1]:

  • 提供信息的变量;
  • 控制变量;
  • 描述系统的变量;
  • 控制构建过程的变量;
  • 语言变量;
  • CTest变量;
  • CPack变量。

cmake常见的变量(即选项):

  • CMAKE_SOURCE_DIR
  • CMAKE_CXX_FLAGS
  • CMAKE_C_FLAGS
  • CMAKE_CXX_STANDARD

三、cmake增加常见选项

常见的选项主要是CXX的标准,或者CXX的标志。

  • 设置CMAKE_CXX_STANDARD变量增加c++11标准:set(CMAKE_CXX_STANDARD 11)
  • 设置CMAKE_CXX_FLAGS变量增加pthread支持:set(CMAKE_CXX_FLAGS -pthread)
  • 设置CMAKE_CXX_FLAGS为多个选项:set(CMAKE_CXX_FLAGS "-pthread -g -Wall")
  • 设置CMAKE_CXX_FLAGS变量让程序先找当前目录:set(CMAKE_CXX_FLAGS "-Wl,-rpath=.")

四、CMake添加预处理选项

对于C/C++语言,编译器预处理命令主要有:

  • 文件包含
  • 宏定义
  • 条件编译
  • 特殊控制(#progma)

我们可以选择在代码中写这些预处理命令,也可以直接在命令行向编译器传递。编译器在处理时需要添加一个额外的-D或者\D,代码中具体使用方法见[2]。

CMake使用add_definitions向编译器传递一个编译选项,它可以是编译器任何一个命令,但其初衷是为了增加一个预处理定义

注意!add_definitions添加的内容是一个非常宽泛的东西,新版本已经被取代(superseded),更加细化的描述了编译选项:

  • add_compile_definitions() 预处理(宏定义变量),多个直接用空格隔开
  • include_directories() 头文件
  • add_compile_option() 其他

PS:set某个变量也可以间接设置预处理命令。

综上,如果你需要增加一个编译选项,按选项的性质选择上述三个即可,直接使用add_definitions因为“粒度太大”而不再被推荐使用。多个

例子:
利用BUILD_ALL宏定义条件编译代码:

int main()
{
    #ifdef BUILD_DLL
    printf("Hellodd");
    #endif
    return 0;
}

在CMakelists.txt下增加以下语句:

add_compile_definitions(BUILD_DLL)

注意,不用写额外的-D.

add_compile_definitions(BUILD_DLL)

[1] https://www.cnblogs.com/liuzhenbo/p/11184608.html
[2] https://www.cnblogs.com/LiuYanYGZ/p/5496006.html
[3] https://blog.csdn.net/10km/article/details/51731959
[4] https://stackoverflow.com/questions/9017573/define-preprocessor-macro-through-cmake

【20220705】重写了“CMake添加预处理选项”小结

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值