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);
}
cmake:add_definitions相关推荐
- CMake中add_definitions/add_compile_definitions的使用
CMake中的add_definitions命令用于在源文件的编译中添加-D定义标志,其格式如下: add_definitions(-DFOO -DBAR ...) 将当前目录中的target的定义添 ...
- CMake:安装自己编写的动态库,报错
CMake:安装自己编写的动态库,报错"file INSTALL cannot copy file" 具体情况如下: 原因: 权限问题. 安装共享库有时需要root密码,执行sud ...
- 【C++】mingw32-make+cmake:error: ‘nullptr‘ was not declared in this scope解决方法
###问题 使用cmake成功(Configuring done Generating done)后,在cmd终端中执行 mingw32-make报错: error: 'nullptr' was no ...
- Linux 7 cmake:curses library not found
CentOS7 上面安装MySQL5.7出现以下问题: Curses library not found. Please install appropriate package 解决方法: # yum ...
- cmake:add_library生成静态库和动态库
此文为:轻松入门cmake系列教程 有时我们只需要编译出动态库,静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake 实验 实验一:生成静态库 编写代码 项目结构如下: [CMak ...
- cmake:pkg_check_modules
此文为:轻松入门cmake系列教程 理论 是什么? pkg_check_modules是 CMake 自己的 pkg-config 模块的一个用来简化的封装:你不用再检查 CMake 的版本,加载合适 ...
- CMake:aux_source_directory
aux_source_directory 查找在某个路径下的所有源文件. aux_source_directory(< dir > < variable >) 具体用法: au ...
- cmake:命令行工具cmake
概要 Generate a Project Buildsystemcmake [<options>] <path-to-source>cmake [<options> ...
- cmake:macro、endmacro
macro 开始记录一个宏,以便以后作为命令调用 macro(<name> [<arg1> ...])<commands> endmacro() 定义了一个名为&l ...
最新文章
- Windows Server 2003 R2實現域內共享打印機智能部署
- 前端的面试之旅(一)
- TCP/IP协议-概念、应用、开发、Hack
- 成功解决 修改pip的默认安装packages包的路径
- 惠普刀片服务器c7000硬件配置手册_刀片服务器四点不足之处你都知道几个?
- 只读域控制器在Server Core中的部署
- FineReport:关于扩展行列求各种条件下的函数运用
- 链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的
- 和秋叶一起学PPT之快速标准化长文档(课时三)
- WPS文字常用排版快捷键
- Msfconsole的基本使用
- python识别视频中火焰_监控视频中火焰检测算法
- MATLAB图像处理学习日记之图像的自定义裁剪imcrop操作
- C++ 填入数字1-9 使数学等式成立
- 如何玩好“用户思维”
- Linux的企鹅图标
- 如何删除Win10“此电脑”中多出的“CD驱动器”盘符
- 基于Android的旅游app的设计与实现
- OCT1400 光耦参数测试仪
- 网络游戏端 零纪元 服务端搭建
热门文章
- Kubernetes学习笔记
- 计算机世界的黑客帝国
- Callback函数的使用
- 实战Kaggle比赛:预测房价
- HAWQ-V3: Dyadic Neural Network Quantization论文学习
- 16进制转换byte数组;byte数组转16进制;随机产生一组16进制数;读写
- matplotlib 进阶之Tight Layout guide
- 戴尔Alienware x15R1 x15R2原厂win11系统带F12 Support Assist OS Recovery恢复功能
- git 软件开发和发布流程(一)
- 基于自研分布式内存及流数据库技术的柏睿数据宣布获2亿元C轮融资