一 内容
-
请先阅读 CMake Tutorial3 增加库的使用要求 。
-
主要说明 如何使用install命令安装目标。
-
文件目录
step4_1 |- MathFunctions |- CMakeLists.txt |- MathFunctions.h |- mysqrt.cc |- CMakeaLists.txt |- main.cc |- TutorialConfig.h.in -
修改MathFunctions/CMakeLists.txt
add_library(MathFunctions mysqrt.cc) # state that anybody linking to MathFunctions needs to include the current source directory, # while MathFunctions itself doesn't # 即链接方不需处理包含MathFunctions源文件目录 target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} ) # ---add install(TARGETS MathFunctions DESTINATION lib) install(FILES MathFunctions.h DESTINATION include) -
修改CMakeLists.txt
# 设置CMake最低版本 cmake_minimum_required(VERSION 3.16) # 设置项目名称及版本 project(Tutorial VERSION 1.0) # 生成可执行文件 add_executable(Tutorial main.cc) # 设置选项 option(USE_MYMATH "use Turotial math" ON) # 配置文件:拷贝文件到另一位置,并且修改其内容 configure_file(TutorialConfig.h.in TutorialConfig.h) if(USE_MYMATH) add_subdirectory(MathFunctions) list(APPEND extra_libs MathFunctions) endif() target_link_libraries(Tutorial PUBLIC ${extra_libs}) # 打印信息 message("PROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}") # 增加include路径到目标,否则会无法include生成的TutorialConfig.h target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}") # ---add install(TARGETS Tutorial DESTINATION bin) install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h" DESTINATION include)
二 构建及安装
lee@leedeMacBook-Pro cmake_tutorial % cd step4_1
lee@leedeMacBook-Pro step4_1 % ls
CMakeLists.txt TutorialConfig.h.in main.cc
MathFunctions build
lee@leedeMacBook-Pro step4_1 % cd build
lee@leedeMacBook-Pro build % cmake ..
-- The C compiler identification is AppleClang 12.0.0.12000032
-- The CXX compiler identification is AppleClang 12.0.0.12000032
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
PROJECT_BINARY_DIR=/Users/lee/research/cmake_learn/cmake_tutorial/step4_1/build
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/lee/research/cmake_learn/cmake_tutorial/step4_1/build
lee@leedeMacBook-Pro build % cmake --build .
[ 25%] Building CXX object MathFunctions/CMakeFiles/MathFunctions.dir/mysqrt.cc.o
[ 50%] Linking CXX static library libMathFunctions.a
[ 50%] Built target MathFunctions
[ 75%] Building CXX object CMakeFiles/Tutorial.dir/main.cc.o
[100%] Linking CXX executable Tutorial
[100%] Built target Tutorial
lee@leedeMacBook-Pro build % cmake --install .
-- Install configuration: ""
-- Installing: /usr/local/lib/libMathFunctions.a
-- Installing: /usr/local/include/MathFunctions.h
-- Installing: /usr/local/bin/Tutorial
-- Installing: /usr/local/include/TutorialConfig.h
lee@leedeMacBook-Pro build % cmake --install . --prefix ../install
-- Install configuration: ""
-- Installing: /Users/lee/research/cmake_learn/cmake_tutorial/step4_1/build/../install/lib/libMathFunctions.a
-- Installing: /Users/lee/research/cmake_learn/cmake_tutorial/step4_1/build/../install/include/MathFunctions.h
-- Installing: /Users/lee/research/cmake_learn/cmake_tutorial/step4_1/build/../install/bin/Tutorial
-- Installing: /Users/lee/research/cmake_learn/cmake_tutorial/step4_1/build/../install/include/TutorialConfig.h
-
如上,使用 cmake --install . 默认安装到了/usr/local 目录下
-
也可以通过 --prefix 指定目录,例如 cmake --install . --prefix …/install
-
此时文件目录
step4_1 |- MathFunctions |- CMakeLists.txt |- MathFunctions.h |- mysqrt.cc |- CMakeaLists.txt |- main.cc |- TutorialConfig.h.in |- install |- include |- MathFunctions.h |- TutorialConfig.h |- lib |- libMathFunctions.a |- bin |- Tutorial
三 Github
- 代码已上传Github
本文介绍如何使用CMake的install命令来安装项目的目标文件至指定目录。通过实例演示了配置文件的使用,以及如何通过构建系统将库文件和头文件安装到特定的位置。
200

被折叠的 条评论
为什么被折叠?



