当前位置:网站首页>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 .
边栏推荐
- Thesis reading_ Medical NLP model_ EMBERT
- Knowing that his daughter was molested, the 35 year old man beat the other party to minor injury level 2, and the court decided not to sue
- Read libco save and restore the on-site assembly code
- Ordinary programmers look at the code, and top programmers look at the trend
- MySQL之知识点(七)
- Redis+caffeine two-level cache enables smooth access speed
- MySQL queries the latest qualified data rows
- How to modify MySQL fields as self growing fields
- Mongodb (quick start) (I)
- leetcode每日一题:字符串中的第一个唯一字符
猜你喜欢
随机推荐
C (WinForm) the current thread is not in a single threaded unit, so ActiveX controls cannot be instantiated
統計php程序運行時間及設置PHP最長運行時間
较文心损失一点点性能提升很多
如何修改mysql字段为自增长字段
Cartoon: how to multiply large integers? (I) revised version
Short the command line via jar manifest or via a classpath file and rerun
Example tutorial of SQL deduplication
解决“双击pdf文件,弹出”请安装evernote程序
基于YOLOv3的口罩佩戴检测
Why is all (()) true and any (()) false?
漫画:寻找无序数组的第k大元素(修订版)
Thesis reading_ Medical NLP model_ EMBERT
Knowing that his daughter was molested, the 35 year old man beat the other party to minor injury level 2, and the court decided not to sue
Cmake tutorial step6 (add custom commands and generate files)
漫画:一道数学题引发的血案
MySQL之知识点(七)
求解为啥all(())是True, 而any(())是FALSE?
This 17-year-old hacker genius cracked the first generation iPhone!
一文了解Go语言中的函数与方法的用法
漫画:如何实现大整数相乘?(下)









