首页 > 其他分享 >CMakeLists---自定义变量-add_definitions()函数

CMakeLists---自定义变量-add_definitions()函数

时间:2023-04-28 15:47:33浏览次数:46  
标签:CMakeLists code 自定义 user1 --- add build test Data

转载:https://blog.csdn.net/qq_35699473/article/details/115837708

引言

其实这个函数在安装一些库的时候,它的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后面的参数就是控制程序流向。

1.add_definitions()

官方解释. add_definitions — CMake 3.0.2 Documentation

2.应用

这种可以在我们更改别人代码做实验时使用,既不对其源码进行破坏,又可以添加自己的功能。之前都是在程序中进行#define,有了这个后可以直接在编译的时候进行选择。具体的,在工程CMakeLists.txt 中,使用add_definitions()函数控制代码的开启和关闭:

option(TEST_DEBUG "option for debug" OFF)
if (TEST_DEBUG) 
    add_definitions(-DTEST_DEBUG)
endif(TEST_DEBUG)


运行构建项目的时候可以添加参数控制宏的开启和关闭.

 cmake -DTEST_DEBUG=1 .. #打开
 cmake -DTEST_DEBUG=0 .. #关闭


在源码中就可以使用:

  1.   #ifdef TEST_DEBUG
  2.   ...
  3.   ...
  4.   #else 
  5.   ...
  6.   #endif

3. 一个例子

main函数

  1.   #include <iostream>
  2.   #include <vector>
  3.    
  4.   //#define USE_NEW_METHOD //不用在这里再开关此行代码了
  5.    
  6.   int main(int argc, char **argv) {
  7.   std::cout << "Hello, world!" << std::endl;
  8.    
  9.   #ifdef USE_NEW_METHOD
  10.   std::cout << "USE NEW METHOD " << std::endl;
  11.   #else
  12.   std::cout << "USE DEFAULT METHOD" << std::endl;
  13.   #endif
  14.    
  15.   std::cout << "END" << std::endl;
  16.    
  17.   return 0;
  18.   }

CMakeLists.txt

  1.   cmake_minimum_required(VERSION 3.0)
  2.   project(test)
  3.    
  4.   if(USE_NEW_METHOD)
  5.   add_definitions(-DUSE_NEW_METHOD)
  6.   endif()
  7.    
  8.   add_executable(test main.cpp)
  9.    
  10.   install(TARGETS test RUNTIME DESTINATION bin)

编译运行

user1@user1 ~/Data/test_code/test/build (master*) $ cmake -DUSE_NEW_METHOD=ON ..

-- Configuring done

-- Generating done

-- Build files have been written to: /home/user1/Data/test_code/test/build

user1@user1 ~/Data/test_code/test/build (master*) $ make

Consolidate compiler generated dependencies of target test

[ 50%] Building CXX object CMakeFiles/test.dir/main.cpp.o

[100%] Linking CXX executable test

[100%] Built target test

user1@user1 ~/Data/test_code/test/build (master*) $ ./test

Hello, world!

USE NEW METHOD

END

user1@user1 ~/Data/test_code/test/build (master*) $ cmake -DUSE_NEW_METHOD=OFF ..

-- Configuring done

-- Generating done

-- Build files have been written to: /home/user1/Data/test_code/test/build

user1@user1 ~/Data/test_code/test/build (master*) $ make

Consolidate compiler generated dependencies of target test

[ 50%] Building CXX object CMakeFiles/test.dir/main.cpp.o

[100%] Linking CXX executable test

[100%] Built target test

user1@user1 ~/Data/test_code/test/build (master*) $ ./test

Hello, world!

USE DEFAULT METHOD

END

user1@user1 ~/Data/test_code/test/build (master*) $

标签:CMakeLists,code,自定义,user1,---,add,build,test,Data
From: https://www.cnblogs.com/linxisuo/p/17362356.html

相关文章

  • el-tree实现树形结构叶子节点和非叶子节点的区分显示的写法
    需求,非叶子节点显示主题名称+主题下的指标;叶子节点显示代码+名称1、设置prop属性<el-tree:data="dimListTree"ref="dimListTree"row-key="getGroup":props="treeProps":allow-drop="al......
  • 海康威视 wx-668 门禁接线
    wx-668 门禁端12V+-->12V+12VGND-->12VGNDNO-->PUSHLOCKCOM此处相互短接 GND ......
  • 词库过大导致的Redis超时问题-RedisCommandTimeoutException
    问题Redis缓存超时问题报错内容redisio.lettuce.core.RedisCommandTimeoutException:Commandtimedoutafter10second(s)原因1.报错原因这里是因为词库的数据量过大,在开发库中有40w的数据需要刷到缓存中,因数据量过大时间久,Redis直接刷挂了2.为什么线上没有问题线上的......
  • Python-webdriver_manager的简单使用
     提前祝大家五一快乐(*^▽^*)前言:我们在使用Selenium做UI自动化时都需要手动去下载各个浏览器版本的webdriver,有时我们可能还会遇到跨操作系统去进行测试。以及有时因浏览器自动升级等原因,导致我们不得再去更新对应版本的webdriver。为了解决以上问题,webdriver-m......
  • Vue插件图片预览hevue-img-preview
    安装#安装npminstallhevue-img-preview--save#main.js引入importhevueImgPreviewfrom'hevue-img-preview'Vue.use(hevueImgPreview)#使用#//给任意对象添加任意事件,例如<img:src="imgurl"@click="previewImg(imgurl)">#//在事件里调用方法进行预......
  • 研究NIST FIPS 199 - 安全分类的标准
    NISTFIPS199-安全分类的标准FIPS199是在2004年2月发布的,这是一份古老的文件,但在实施信息安全时应首先遵循,无论你准备遵守哪种安全标准。常见的安全标准有:CIS、ISO27001、NIST网络安全框架等。目的根据风险程度提供适当的控制水平;推荐信息系统类别的准则;对所有类别都应做......
  • 淘宝店铺商品详情接口代码-获取淘宝商品详情 API 接口返回值说明示例
    ​现在某宝的规则越来越严,想要入驻某宝需要审核的特别严格,不然就会被封店,那么大家知道某宝店铺商品详情接口吗?下面是我整理的关于某宝店铺商品详情接口的相关内容,大家可以来了解下! 目前提供的接口有:商品详情、商品详情原数据、商品评论、商品快递费用、淘宝分类详情、关键字搜......
  • 记录一下linux-kafka命令
    使用工具:puTTY下载地址:DownloadPuTTY-afreeSSHandtelnetclientforWindowsloginas:rootroot@*******'spassword:Lastlogin:FriApr2814:54:262023from10.10.16.80[root@kafka272c41~]#cd..[root@kafka272c41/]#ls-a....autorelabelbinboot......
  • 使用Mockito-mock,static方法
    示例publicList<Authen>selectAuthenList(Authenauthen){//静态方法LoggedInUserloginUser=WebUtil.getLoggedInUser(); StringtenantId=loginUser.getTenantId(); authen.setTenantId(Long.parseLong(tenantId));//业务 returnau......
  • 如何在Timeline中创建自定义轨道?
    你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。用过一段时间Timeline后,我问大智:“Timeline中只有这么几个轨道么?我发现有的需求这些轨道根本没办法满足,使用之前学过的PlayableTrack也很麻烦,还有其他办法么?”大智:“你遇到了什么问题呢?”小新:“之前咱们学的那......