当前位置:网站首页>CMake教程Step3(添加库的使用要求)
CMake教程Step3(添加库的使用要求)
2022-07-05 16:36:00 【开始沸腾了】
CMake官方文档
参考官方cmake3.24教程翻译
https://cmake.org/cmake/help/v3.24/guide/tutorial/index.html
https://gitlab.kitware.com/cmake/cmake/-/tree/master/Help/guide/tutorial
step3
https://cmake.org/cmake/help/v3.24/guide/tutorial/Adding%20Usage%20Requirements%20for%20a%20Library.html
我的仓库 :
https://github.com/FRBoiling/cmake-tutorial.git
库的使用要求允许更好地控制库或可执行文件的链接和包含行,同时还可以更好地控制 CMake 中目标的传递属性。
主要命令
- target_compile_definitions()
- target_compile_options()
- target_include_directories()
- target_link_libraries()
重构项目
让我们基于CMake教程Step2中的项目进行重构(Step3),以满足现代的CMake中的使用要求 。
我们首先声明,库MathFunctions的任何链接,除MathFunctions本身以外,都需要包含当前源目录。
因此,这可能成为接口使用要求。
记住INTERFACE意味着消费者需要而生产者不需要的东西。在MathFunctions/CMakeLists.txt更改后如下:
add_library(MathFunctions mysqrt.cxx)
# state that anybody linking to us needs to include the current source dir to find MathFunctions.h, while we don't.
target_include_directories(MathFunctions
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
)
现在我们已经指定了MathFunctions的使用要求.
安全地从顶级CMakeLists.txt中删除EXTRA_INCLUDES变量的使用,找到如下位置进行更改:
...
# add the MathFunctions library
if(USE_MYMATH)
add_subdirectory(MathFunctions)
list(APPEND EXTRA_LIBS MathFunctions)
# list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")
endif()
...
# add the binary tree to the search path for include files so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}"
# ${EXTRA_INCLUDES}
)
一旦完成,运行cmake可执行文件或cmake-gui来配置项目,然后使用您选择的构建工具或使用cmake——build构建它。从构建目录。
重构后,完整的顶级目录CMakeLists.txt内容如下
cmake_minimum_required(VERSION 3.10)
# set the project name and version
project(Tutorial VERSION 1.0)
# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# should we use our own math functions
option(USE_MYMATH "Use tutorial provided math implementation" ON)
# configure a header file to pass some of the CMake settings
# to the source code
configure_file(TutorialConfig.h.in TutorialConfig.h)
# add the MathFunctions library
if(USE_MYMATH)
add_subdirectory(MathFunctions)
list(APPEND EXTRA_LIBS MathFunctions)
endif()
# add the executable
add_executable(Tutorial tutorial.cxx)
target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})
# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}"
)
测试
现在让我们更新USE_MYMATH的值。
最简单的方法是在终端中使用cmake-gui或ccmake。
你也可以通过从命令行修改这个选项,如下
cmake …/Step3 -DUSE_MYMATH=ON
或者
cmake …/Step3 -DUSE_MYMATH=OFF
cd Step3_build
cmake ../Step3 -DUSE_MYMATH=ON
cmake --build .
边栏推荐
- [wechat applet] read the life cycle and route jump of the applet
- 【性能测试】jmeter+Grafana+influxdb部署实战
- Bs-xx-042 implementation of personnel management system based on SSM
- [61dctf]fm
- 【剑指 Offer】66. 构建乘积数组
- The two ways of domestic chip industry chain go hand in hand. ASML really panicked and increased cooperation on a large scale
- WSL2.0安装
- Wechat official account web page authorization login is so simple
- 机器学习编译第2讲:张量程序抽象
- Learnopongl notes (I)
猜你喜欢

PHP人才招聘系统开发 源代码 招聘网站源码二次开发

DenseNet

美国芯片傲不起来了,中国芯片成功在新兴领域夺得第一名

Games101 notes (II)

Bs-xx-042 implementation of personnel management system based on SSM

项目引入jar从私服Nexus 拉去遇到的一个问题

深潜Kotlin协程(二十一):Flow 生命周期函数

Games101 notes (III)

Detailed explanation of use scenarios and functions of polar coordinate sector diagram
![[Web attack and Defense] WAF detection technology map](/img/7c/60a25764950668ae454b2bc08fe57e.png)
[Web attack and Defense] WAF detection technology map
随机推荐
关于new Map( )还有哪些是你不知道的
【剑指 Offer】62. 圆圈中最后剩下的数字
High number | summary of calculation methods of volume of rotating body, double integral calculation of volume of rotating body
Jarvis OJ 远程登录协议
C# TCP如何设置心跳数据包,才显得优雅呢?
手机开证券账户安全吗?怎么买股票详细步骤
ECU introduction
[61dctf]fm
Jarvis OJ Telnet Protocol
The second day of learning C language for Asian people
深耕5G,芯讯通持续推动5G应用百花齐放
Do sqlserver have any requirements for database performance when doing CDC
什么是ROM
Learnopongl notes (I)
【剑指 Offer】61. 扑克牌中的顺子
Embedded-c Language-1
微信公众号网页授权登录实现起来如此简单
【微信小程序】一文读懂小程序的生命周期和路由跳转
网站页面禁止复制内容 JS代码
Bs-xx-042 implementation of personnel management system based on SSM