当前位置:网站首页>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 .
边栏推荐
- Is it safe to open futures accounts online? Will there be more liars online? Doesn't feel very reliable?
- 【机器人坐标系第一讲】
- C# TCP如何设置心跳数据包,才显得优雅呢?
- Games101 notes (I)
- 7.Scala类
- Scratch colorful candied haws Electronic Society graphical programming scratch grade examination level 3 true questions and answers analysis June 2022
- Is it safe to open a securities account by mobile phone? Detailed steps of how to buy stocks
- thinkphp模板的使用
- [729. My Schedule i]
- dried food! Semi supervised pre training dialogue model space
猜你喜欢

composer安装报错:No composer.lock file present.
![[729. My Schedule i]](/img/e3/32914227d00cf7595ee850e60f2b72.png)
[729. My Schedule i]

WSL2.0安装

The two ways of domestic chip industry chain go hand in hand. ASML really panicked and increased cooperation on a large scale

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

Etcd build a highly available etcd cluster

ECU introduction

Embedded -arm (bare board development) -2

Deep dive kotlin synergy (XXI): flow life cycle function

Jarvis OJ Flag
随机推荐
Benji Banas membership pass holders' second quarter reward activities update list
Games101 notes (II)
Games101 notes (III)
【729. 我的日程安排錶 I】
激动人心!2022开放原子全球开源峰会报名火热开启!
DenseNet
采用药丸屏的iPhone14或引发中国消费者的热烈抢购
Etcd build a highly available etcd cluster
Learnopongl notes (I)
First day of learning C language
Data verification before and after JSON to map -- custom UDF
【性能测试】全链路压测
麻烦问下,DMS中使用Redis语法是以云数据库Redis社区版的命令为参考的嘛
WR | 西湖大学鞠峰组揭示微塑料污染对人工湿地菌群与脱氮功能的影响
It is forbidden to copy content JS code on the website page
兰空图床苹果快捷指令
Explain in detail the functions and underlying implementation logic of the groups sets statement in SQL
网上办理期货开户安全吗?网上会不会骗子比较多?感觉不太靠谱?
China Radio and television officially launched 5g services, and China Mobile quickly launched free services to retain users
High number | summary of calculation methods of volume of rotating body, double integral calculation of volume of rotating body