此文为:轻松入门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相关推荐

  1. CMake中add_definitions/add_compile_definitions的使用

    CMake中的add_definitions命令用于在源文件的编译中添加-D定义标志,其格式如下: add_definitions(-DFOO -DBAR ...) 将当前目录中的target的定义添 ...

  2. CMake:安装自己编写的动态库,报错

    CMake:安装自己编写的动态库,报错"file INSTALL cannot copy file" 具体情况如下: 原因: 权限问题. 安装共享库有时需要root密码,执行sud ...

  3. 【C++】mingw32-make+cmake:error: ‘nullptr‘ was not declared in this scope解决方法

    ###问题 使用cmake成功(Configuring done Generating done)后,在cmd终端中执行 mingw32-make报错: error: 'nullptr' was no ...

  4. Linux 7 cmake:curses library not found

    CentOS7 上面安装MySQL5.7出现以下问题: Curses library not found. Please install appropriate package 解决方法: # yum ...

  5. cmake:add_library生成静态库和动态库

    此文为:轻松入门cmake系列教程 有时我们只需要编译出动态库,静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake 实验 实验一:生成静态库 编写代码 项目结构如下: [CMak ...

  6. cmake:pkg_check_modules

    此文为:轻松入门cmake系列教程 理论 是什么? pkg_check_modules是 CMake 自己的 pkg-config 模块的一个用来简化的封装:你不用再检查 CMake 的版本,加载合适 ...

  7. CMake:aux_source_directory

    aux_source_directory 查找在某个路径下的所有源文件. aux_source_directory(< dir > < variable >) 具体用法: au ...

  8. cmake:命令行工具cmake

    概要 Generate a Project Buildsystemcmake [<options>] <path-to-source>cmake [<options> ...

  9. cmake:macro、endmacro

    macro 开始记录一个宏,以便以后作为命令调用 macro(<name> [<arg1> ...])<commands> endmacro() 定义了一个名为&l ...

最新文章

  1. Windows Server 2003 R2實現域內共享打印機智能部署
  2. 前端的面试之旅(一)
  3. TCP/IP协议-概念、应用、开发、Hack
  4. 成功解决 修改pip的默认安装packages包的路径
  5. 惠普刀片服务器c7000硬件配置手册_刀片服务器四点不足之处你都知道几个?
  6. 只读域控制器在Server Core中的部署
  7. FineReport:关于扩展行列求各种条件下的函数运用
  8. 链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的
  9. 和秋叶一起学PPT之快速标准化长文档(课时三)
  10. WPS文字常用排版快捷键
  11. Msfconsole的基本使用
  12. python识别视频中火焰_监控视频中火焰检测算法
  13. MATLAB图像处理学习日记之图像的自定义裁剪imcrop操作
  14. C++ 填入数字1-9 使数学等式成立
  15. 如何玩好“用户思维”
  16. Linux的企鹅图标
  17. 如何删除Win10“此电脑”中多出的“CD驱动器”盘符
  18. 基于Android的旅游app的设计与实现
  19. OCT1400 光耦参数测试仪
  20. 网络游戏端 零纪元 服务端搭建

热门文章

  1. Kubernetes学习笔记
  2. 计算机世界的黑客帝国
  3. Callback函数的使用
  4. 实战Kaggle比赛:预测房价
  5. HAWQ-V3: Dyadic Neural Network Quantization论文学习
  6. 16进制转换byte数组;byte数组转16进制;随机产生一组16进制数;读写
  7. matplotlib 进阶之Tight Layout guide
  8. 戴尔Alienware x15R1 x15R2原厂win11系统带F12 Support Assist OS Recovery恢复功能
  9. git 软件开发和发布流程(一)
  10. 基于自研分布式内存及流数据库技术的柏睿数据宣布获2亿元C轮融资