当前位置:网站首页>Cmake tutorial Step3 (requirements for adding libraries)
Cmake tutorial Step3 (requirements for adding libraries)
2022-07-05 17:45:00 【It's beginning to boil】
CMake Official documents
Refer to the official cmake3.24 Course translation
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
My warehouse :
https://github.com/FRBoiling/cmake-tutorial.git
The use requirements of the library allow better control over the links and included lines of the library or executable , At the same time, it can better control CMake The transfer attribute of the target in .
The main command
- target_compile_definitions()
- target_compile_options()
- target_include_directories()
- target_link_libraries()
Refactoring project
Let's base ourselves on CMake course Step2 Refactoring the project in (Step3), To meet modern CMake Requirements for use in .
Let's first state , library MathFunctions Any links to , except MathFunctions Beyond itself , All need to include the current source directory .
therefore , This may become an interface usage requirement .
remember INTERFACE It means what consumers need but producers don't need . stay MathFunctions/CMakeLists.txt The changes are as follows :
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}
)
Now we have designated MathFunctions Requirements for use of .
Safely from the top CMakeLists.txt Delete in EXTRA_INCLUDES Use of variables , Find the following location to change :
...
# 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}
)
Once that is done , function cmake Executable or cmake-gui To configure the project , Then use the build tool of your choice or use cmake——build Build it . From build directory .
After refactoring , Complete top-level directory CMakeLists.txt The contents are as follows
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}"
)
test
Now let's update USE_MYMATH Value .
The simplest way is to use it in the terminal cmake-gui or ccmake.
You can also modify this option from the command line , as follows
cmake …/Step3 -DUSE_MYMATH=ON
perhaps
cmake …/Step3 -DUSE_MYMATH=OFF
cd Step3_build
cmake ../Step3 -DUSE_MYMATH=ON
cmake --build .
边栏推荐
- How to modify MySQL fields as self growing fields
- Database design in multi tenant mode
- QT控制台打印输出
- Cartoon: how to multiply large integers? (I) revised version
- 漫画:如何实现大整数相乘?(上) 修订版
- 一文了解Go语言中的函数与方法的用法
- Debug kernel code through proc interface
- CVPR 2022最佳学生论文:单张图像估计物体在3D空间中的位姿估计
- 查看自己电脑连接过的WiFi密码
- What are the precautions for MySQL group by
猜你喜欢
What are the precautions for MySQL group by

Machine learning 01: Introduction

十个顶级自动化和编排工具

7. Scala class

Oracle Recovery Tools ----oracle数据库恢复利器

Server configuration jupyter environment

VBA驱动SAP GUI实现办公自动化(二):判断元素是否存在

To solve the problem of "double click PDF file, pop up", please install Evernote program

Knowledge points of MySQL (7)
Database design in multi tenant mode
随机推荐
Webapp development - Google official tutorial
VBA驱动SAP GUI实现办公自动化(二):判断元素是否存在
漫画:寻找无序数组的第k大元素(修订版)
Redis+caffeine two-level cache enables smooth access speed
Clickhouse (03) how to install and deploy Clickhouse
Force deduction solution summary 729- my schedule I
PMP认证需具备哪些条件啊?费用多少啊?
使用QT设计师界面类创建2个界面,通过按键从界面1切换到界面2
Humi analysis: the integrated application of industrial Internet identity analysis and enterprise information system
Disabling and enabling inspections pycharm
统计php程序运行时间及设置PHP最长运行时间
Example tutorial of SQL deduplication
蚂蚁金服的暴富还未开始,Zoom的神话却仍在继续!
leetcode每日一练:旋转数组
2022年信息系统管理工程师考试大纲
较文心损失一点点性能提升很多
Check the WiFi password connected to your computer
QT控制台打印输出
ICML 2022 | Meta提出魯棒的多目標貝葉斯優化方法,有效應對輸入噪聲
Force deduction solution summary 1200 minimum absolute difference