我的这段代码的目标是将包含文件夹的静态库复制到另一个目录中。
新目录的结构为
output_dir
├───include
├───lib
└───win64
我有两行 install
行 CMake 代码,我想将其减少为一行。首先,我将 lib 目标安装到 output_dir/lib/win64
并将 include
目录安装到 output_dir/include
。
add_library(lib STATIC test.cpp )
target_include_directories(lib
PUBLIC
${PROJECT_SOURCE_DIR}/include
)
install(TARGETS lib
ARCHIVE
DESTINATION
${PROJECT_SOURCE_DIR}/build/output_dir/lib/win64
)
install(DIRECTORY
${PROJECT_SOURCE_DIR}/include
DESTINATION
${PROJECT_SOURCE_DIR}/build/output_dir/include
)
我想有效地将两个安装命令减少为一个,这是我最好的尝试。静态 lib
库被正确复制,但目录被忽略。
install(TARGETS lib
ARCHIVE
DESTINATION
${PROJECT_SOURCE_DIR}/build/output_dir/lib/win64
PUBLIC_HEADER
DESTINATION
${PROJECT_SOURCE_DIR}/build/output_dir/
INCLUDES
DESTINATION
${PROJECT_SOURCE_DIR}/build/output_dir/
)
我知道错误出在 public_header,但我做错了什么?
最佳答案
您应该只需要 install()
命令中的 PUBLIC_HEADER
参数,而不是 INCLUDES
参数。但是,您的 PUBLIC_HEADER
参数不会获取任何头文件,因为 PUBLIC_HEADER
lib
目标的属性尚未设置。尝试这样的事情:
add_library(lib STATIC test.cpp)
target_include_directories(lib
PUBLIC
${PROJECT_SOURCE_DIR}/include
)
# List the headers we want to declare as public for installation.
set(MY_PUBLIC_HEADERS
${PROJECT_SOURCE_DIR}/include/MyHeader.hpp
${PROJECT_SOURCE_DIR}/include/MyHeader2.hpp
...
)
# Tell the target these headers are "public".
set_target_properties(lib PROPERTIES PUBLIC_HEADER "${MY_PUBLIC_HEADERS}")
install(TARGETS lib
ARCHIVE
DESTINATION ${PROJECT_SOURCE_DIR}/build/output_dir/lib/win64
PUBLIC_HEADER
DESTINATION ${PROJECT_SOURCE_DIR}/build/output_dir
)
关于visual-studio - CMake - 如何在安装(目标)中安装(目录)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797459/