【发布时间】:2019-07-09 07:53:10
【问题描述】:
我有一个包含 CMakeLists.txt 和 7 个可执行文件的项目:
/Project
/build
/Subprogram1
/Subprogram2
...
/Subprogram7
CMakeLists.txt
我的 CMakeLists.txt :
project(Project)
cmake_minimum_required(VERSION 2.8)
set( CMAKE_CXX_FLAGS "-O0 -Wall -pedantic -std=c++11" )
include_directories( "${PROJECT_SOURCE_DIR}/headers" )
include_directories( "${PROJECT_SOURCE_DIR}/Subprogram1/headers" )
include_directories( "${PROJECT_SOURCE_DIR}/Subprogram2/headers" )
include_directories( "${PROJECT_SOURCE_DIR}/Subprogram3/headers" )
....
include_directories( "${PROJECT_SOURCE_DIR}/Subprogram7/headers" )
set( INSTALL_PATH /usr/local/bin/ )
set( INSTALL_MANPAGES_PATH /usr/local/man/man1 )
add_executable(Subprogram1
"${PROJECT_SOURCE_DIR}/headers/headers.h"
"${PROJECT_SOURCE_DIR}/Subprogram1/headers/headers1.cpp"
"${PROJECT_SOURCE_DIR}/Subprogram1/src/main.cpp")
....
add_executable(Subprogram7
"${PROJECT_SOURCE_DIR}/headers/headers.h"
"${PROJECT_SOURCE_DIR}/Subprogram7/headers/headers7.cpp"
"${PROJECT_SOURCE_DIR}/Subprogram7/src/main.cpp")
install( TARGETS Subprogram1 DESTINATION ${INSTALL_PATH} )
...
install( TARGETS Subprogram7 DESTINATION ${INSTALL_PATH} )
install( FILES "${PROJECT_SOURCE_DIR}/manpages/Subprogram1.1" DESTINATION ${INSTALL_MANPAGES_PATH})
...
install( FILES "${PROJECT_SOURCE_DIR}/manpages/Subprogram7.1" DESTINATION ${INSTALL_MANPAGES_PATH})
我只想构建和安装一个 Subprogram3。在文件夹 /build 我输入:
cmake ../
make Subprogram3
make install
但是 Cmake 和 Make util 制作了所有程序并安装了它们。我只想要一个 Subprogram3。怎么做?而且我想将我的 CMakeLists.txt 保存为不可变的,并且只找到 cmake 或 make utils 所需的命令行参数。怎么做?
【问题讨论】:
-
“我想将我的 CMakeLists.txt 保存为不可变的,并且只找到 cmake 或 make utils 所需的命令行参数。” - 你不能。在 CMake 中,
make install始终安装在脚本中发出install命令的所有内容。因此,您需要将您的项目调整为 可配置。例如。通过添加一个选项,该选项(如果设置)仅启用特定的install()调用。 -
注意,如果你打算打包你的项目,那么 CMake 提供了cpack 工具。使用此工具,您可以根据
install调用的 COMPONENT 选项将包拆分为多个部分。所以可能有一部分包只包含一个特定的文件。 -
@Tsyvarev 谢谢!如果简短,答案是否定的。因为我现在还没有计划打包我的项目。请写下你的答案,如果每个人都不会得到另一个解决方案,我会检查它。