visual-studio - CMake - 如何在安装(目标)中安装(目录)?

标签 visual-studio cmake

我的这段代码的目标是将包含文件夹的静态库复制到另一个目录中。

新目录的结构为

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/

相关文章:

c++ - 如何使用 Catch2 和 CMake 添加单独的测试文件?

cmake - 在cmake中检测项目语言

c++ - 是否可以制作32位gRPC和protobuf?

c++ - Qt Creator 错误 : cannot find -lopencv_imgcodecs

cmake - 我如何告诉 CMake 在哪里可以找到 libusb?

visual-studio - 如何在 Azure 应用服务网站上获取 Debug.WriteLine 数据(或类似输出)?

c# - XAML 设计器显示属性名称而不是设计器数据 (d :DataContext) when Binding

visual-studio - VS 2019 没有正确建模存储过程,但 VS 2017 可以。有已知的区别吗?

.net - 资源文件名太长

c# - 键入单个数字时,DateTimePicker 值不会更新 onLeave