cmake:add_definitions
此文为:轻松入门cmake系列教程
引言
其实这个函数在安装一些库的时候,它的CMakeLists里面就有这样的函数。典型的就是opencv了。

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目录属性中。 - 为了向后兼容,具有重要值的定义可以保留在标志集合中,而不是进行转换。
官方文档
用处
看源码时使用
这种可以在我们更改别人代码做实验时使用,既不对其源码进行破坏,又可以添加自己的功能。之前都是在程序中进行#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);
}

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
