当前位置:网站首页>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 .
边栏推荐
- Abnormal recovery of virtual machine Oracle -- Xi Fenfei
- Use QT designer interface class to create two interfaces, and switch from interface 1 to interface 2 by pressing the key
- Which platform of outer disk gold is regular and safe, and how to distinguish it?
- Thesis reading_ Chinese NLP_ LTP
- 提高应用程序性能的7个DevOps实践
- Cartoon: looking for the best time to buy and sell stocks
- To solve the problem of "double click PDF file, pop up", please install Evernote program
- 忽米沄析:工业互联网标识解析与企业信息系统的融合应用
- 云主机oracle异常恢复----惜分飞
- 33: Chapter 3: develop pass service: 16: use redis to cache user information; (to reduce the pressure on the database)
猜你喜欢

Why is all (()) true and any (()) false?

论文阅读_中文NLP_LTP

Check the WiFi password connected to your computer

Matlab reference

2022新版PMP考试有哪些变化?

CVPR 2022最佳学生论文:单张图像估计物体在3D空间中的位姿估计

提高应用程序性能的7个DevOps实践

Knowledge points of MySQL (6)

Compter le temps d'exécution du programme PHP et définir le temps d'exécution maximum de PHP

leetcode每日一练:旋转数组
随机推荐
漫画:有趣的海盗问题 (完整版)
Oracle缩表空间的完整解决实例
基于YOLOv3的口罩佩戴检测
About JSON parsing function JSON in MySQL_ EXTRACT
Size_t 是无符号的
服务器配置 jupyter环境
解读:如何应对物联网目前面临的安全问题?
2022年信息系统管理工程师考试大纲
世界上最难的5种编程语言
Thesis reading_ Medical NLP model_ EMBERT
Ant financial's sudden wealth has not yet begun, but the myth of zoom continues!
一文了解Go语言中的函数与方法的用法
Debug kernel code through proc interface
每日一练:关于日期的一系列
Disabling and enabling inspections pycharm
网络威胁分析师应该具备的十种能力
Read libco save and restore the on-site assembly code
Machine learning 01: Introduction
漏洞复现----48、Airflow dag中的命令注入(CVE-2020-11978)
Humi analysis: the integrated application of industrial Internet identity analysis and enterprise information system