cmake:add_definitions 超、凢脫俗 2023-01-01 15:55 122阅读 0赞 > 此文为:[轻松入门cmake系列教程][cmake] # 引言 # 其实这个函数在安装一些库的时候,它的CMakeLists里面就有这样的函数。典型的就是opencv了。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaXpoZW5nZ3Vhbg_size_16_color_FFFFFF_t_70] opencv安装时候有一些指令也是针对这个函数的,比如安装命令: cmake ../opencv-3.4.1 -DWITH_GTK_2_X=ON -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON\ -DBUILD_NEW_PYTHON_SUPPORT=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON \ -DINSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DWITH_OPENGL=ON \ -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS=1 -DWITH_OPENMP=ON 其中-D后面的参数就是控制程序流向。 # 官方文档 # * 为当前目录中的目标(在调用此命令之前或之后添加的目标)以及在此之后添加的子目录中的目标添加定义到编译器命令行。此命令可用于添加任何标志,但它的目的是添加预处理器定义。 * 注意此命令已被替代: * 使用add\_compile\_definitions()添加预处理器定义。 * 使用include\_directories()添加包含目录。 * 使用add\_compile\_options()添加其他选项。 * 以-D或/D开头的看起来像预处理器定义的标志,会自动添加到当前目录的`COMPILE_DEFINITIONS`目录属性中。 * 为了向后兼容,具有重要值的定义可以保留在标志集合中,而不是进行转换。 [官方文档][Link 1] # 用处 # ## 看源码时使用 ## 这种可以在我们更改别人代码做实验时使用,既不对其源码进行破坏,又可以添加自己的功能。之前都是在程序中进行\#define,有了这个后可以直接在编译的时候进行选择。具体的,在工程CMakeLists.txt 中,使用add\_definitions()函数控制代码的开启和关闭: option(TEST_DEBUG "option for debug" OFF) if (TEST_DEBUG) add_definitions(-DTEST_DEBUG) endif(TEST_DEBUG) 运行构建项目的时候可以添加参数控制宏的开启和关闭. cmake -DUSE_MACRO = on .. #打开 cmake -DUSE_MACRO=off .. #关闭 在源码中就可以使用: #ifdef TEST_DEBUG ... ... #else ... #endif 来对程序进行控制。 # 定义变量直接在程序中使用 # CMakeList.txt add_definitions( -DHAVE_CONFIG_H -DCONFIG_DIR="/etc/netdata" ) main.c int main(int argc, char **argv) { printf("%d\n", HAVE_CONFIG_H); printf("%s\n", CONFIG_DIR); } ![在这里插入图片描述][20210103201519912.png] [cmake]: https://blog.csdn.net/zhizhengguan/article/details/107034372 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaXpoZW5nZ3Vhbg_size_16_color_FFFFFF_t_70]: /images/20221120/43cc6b26336847b588a11b8f4988b6da.png [Link 1]: https://cmake.org/cmake/help/v3.0/command/add_definitions.html#command:add_definitions [20210103201519912.png]: /images/20221120/abe8ade4a4d54936af28c335bebee574.png
还没有评论,来说两句吧...