当前位置:网站首页>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 .
边栏推荐
- SQL Server(2)
- Machine learning 02: model evaluation
- Oracle recovery tools -- Oracle database recovery tool
- 漫画:如何实现大整数相乘?(上) 修订版
- Cartoon: a bloody case caused by a math problem
- 外盘黄金哪个平台正规安全,怎么辨别?
- leetcode每日一题:字符串中的第一个唯一字符
- 漫画:如何实现大整数相乘?(下)
- Why is February 28 in the Gregorian calendar
- Please tell me why some tables can find data by writing SQL, but they can't be found in the data map, and the table structure can't be found
猜你喜欢
随机推荐
How to modify MySQL fields as self growing fields
Humi analysis: the integrated application of industrial Internet identity analysis and enterprise information system
为什么阳历中平年二月是28天
Please tell me why some tables can find data by writing SQL, but they can't be found in the data map, and the table structure can't be found
漫画:有趣的海盗问题 (完整版)
Winedt common shortcut key modify shortcut key latex compile button
SQL删除重复数据的实例教程
This 17-year-old hacker genius cracked the first generation iPhone!
一口气读懂 IT发展史
MySQL queries the latest qualified data rows
如何保存训练好的神经网络模型(pytorch版本)
Read libco save and restore the on-site assembly code
Oracle recovery tools -- Oracle database recovery tool
Thesis reading_ Medical NLP model_ EMBERT
BigDecimal除法的精度问题
Why is February 28 in the Gregorian calendar
Cartoon: how to multiply large integers? (integrated version)
7 pratiques devops pour améliorer la performance des applications
flask接口响应中的中文乱码(unicode)处理
Example tutorial of SQL deduplication