这段代码的目的是将包含include文件夹的静态库复制到另一个目录中。
新目录将具有以下结构
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有错误,但是我做错了什么?
2条答案
按热度按时间afdcj2ne1#
install()
命令中只需要PUBLIC_HEADER
参数,而不需要INCLUDES
参数。但是,PUBLIC_HEADER
参数不会获取任何头文件,因为尚未设置lib
目标的PUBLIC_HEADER
属性。请尝试以下操作:gijlo24d2#
如果你们中有人感兴趣的话,下面是我添加
spdlog
include目录(包括嵌套的子目录)的代码,它确实使用了GLOB_RECURSE
,但是我找不到更好的方法。注意:需要CMake〉= 3.23(对于
FILE_SET
)。