我有一个带有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})
那么我只想构建和安装一个子程序3。在文件夹/ build中,我输入:
cmake ../
make Subprogram3
make install
但是Cmake和Make util制作了所有程序并安装了它们。我只需要一个Subprogram3。怎么做?我想将我的CMakeLists.txt保存为不可变的,只找到cmake或制作实用程序所需的命令行参数。怎么做?
答案 0 :(得分:0)
CMake项目的安装始终处理所有 install()
中的CMakeLists.txt
调用。不能要求CMake仅安装专用文件。
此外,安装阶段取决于ALL
目标为整个。 CMake不会在已安装文件(或目标)与创建这些文件(或目标)的命令之间建立依赖关系。
因此,如果您打算仅构建和安装选定的文件/目标,则脚本应发出仅创建此文件/目标的命令,并仅针对给定的文件/目标发布install
。例如,您可以将option
传递给cmake
。
如果未安装项目但打包(使用cpack),情况就大不相同了。
完整的安装阶段已经完成,仍然取决于ALL
的整个情况。
但是可以将项目中install
版的文件分发到几个包中。因此,其中一个软件包将仅包含特定文件。这可以通过为install
命令分配不同的 COMPONENT 选项来实现。