当前位置:网站首页>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 .
边栏推荐
- 启牛商学院股票开户安全吗?靠谱吗?
- Copy mode DMA
- Jarvis OJ Telnet Protocol
- The second day of learning C language for Asian people
- dried food! Semi supervised pre training dialogue model space
- Scratch colorful candied haws Electronic Society graphical programming scratch grade examination level 3 true questions and answers analysis June 2022
- ECU简介
- 微信公众号网页授权登录实现起来如此简单
- 挖财股票开户安全吗?怎么开股票账户是安全?
- Embedded -arm (bare board development) -1
猜你喜欢
[61dctf]fm
PHP talent recruitment system development source code recruitment website source code secondary development
Fleet tutorial 09 basic introduction to navigationrail (tutorial includes source code)
Embedded UC (UNIX System Advanced Programming) -3
国内首家 EMQ 加入亚马逊云科技「初创加速-全球合作伙伴网络计划」
[Jianzhi offer] 63 Maximum profit of stock
Use JDBC technology and MySQL database management system to realize the function of course management, including adding, modifying, querying and deleting course information.
Jarvis OJ simple network management protocol
China Radio and television officially launched 5g services, and China Mobile quickly launched free services to retain users
composer安装报错:No composer.lock file present.
随机推荐
Detailed explanation of printf() and scanf() functions of C language
中国广电正式推出5G服务,中国移动赶紧推出免费服务挽留用户
高数 | 旋转体体积计算方法汇总、二重积分计算旋转体体积
Yarn common commands
C# TCP如何限制单个客户端的访问流量
thinkphp模板的使用
Etcd build a highly available etcd cluster
外盘期货平台如何辨别正规安全?
Jarvis OJ Webshell分析
Jarvis OJ simple network management protocol
叩富网开期货账户安全可靠吗?怎么分辨平台是否安全?
Embedded-c language-6
Iphone14 with pill screen may trigger a rush for Chinese consumers
[61dctf]fm
American chips are no longer proud, and Chinese chips have successfully won the first place in emerging fields
Jarvis OJ shell流量分析
挖财股票开户安全吗?怎么开股票账户是安全?
Deep dive kotlin synergy (XXI): flow life cycle function
【剑指 Offer】61. 扑克牌中的顺子
Bs-xx-042 implementation of personnel management system based on SSM