c++ - CMake:将头文件复制到输出目录

标签 c++ build cmake

我有一个包含 C++ 源文件和头文件的目录。我想创建一个 CMakeLists.txt 以将其构建为一个库,供其他 CMake 项目使用,将其作为子目录包含在内。

结构:

example/
    foo.h
    foo.cpp
    CMakeLists.txt

我遇到的问题是 CMake 似乎没有将 foo.h 放在任何地方,所以让父 CMake 知道如何找到头文件让我感到困惑。

这是我当前的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.8.2)
project(example)
set (CMAKE_CXX_STANDARD 11)

# add library target foo
add_library(foo STATIC foo.cpp)

# tell cmake where to find headers for it
target_include_directories(foo PUBLIC .)

# sad attempt to get it to output the header
set_target_properties(foo PROPERTIES PUBLIC_HEADER foo.h)

我不想安装。这里的想法是该库将被其他 CMake 项目使用,而不是被整个系统使用。

理想情况下,foo.h 会出现在构建目录中的 libfoo.a 旁边。

我试过称它为“FRAMEWORK”,但没有成功;这只是一个 macOs 框架。

我相信我可以陪审团操纵这个,但我认为那里有最佳实践。

也对说“这是更好的方法”的答案持开放态度...

更新

这可能有助于阐明我想如何将这个项目拉入另一个项目。我见过其他项目使用这样的东西:

add_subdirectory(<path_to_foo>/foo foo_build)

这导致 foo 构建发生在子目录中。这使我可以使用“foo_build”来引用该库,它既漂亮又干净。但是,我仍然必须指向原始包含目录才能获取.h 文件,这让我觉得我缺少了一些东西。

似乎 cmake 对此有一个干净的解决方案。

最佳答案

我是 CMake 的新手,但我认为您想要的是 ' add_custom_command '.

add_custom_command(TARGET foo.a POST_BUILD COMMAND copy foo.h ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})

这可能有用。

关于c++ - CMake:将头文件复制到输出目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055414/

相关文章:

c++ - ATI 卡上的片段着色器与 NVIDIA 卡上的片段着色器

java - 未在构建项目中导出映射器文件 (*.xml)。使用mybatis

build - Gtk+ 与 Code::Blocks 在构建时失败

c++ - 在 OSX 上使用 CMake 构建 Unity native 包

configuration - CMake 是否有更高级别的抽象来检测 32 位/64 位构建?

c++ - 如何将正确的库与 GLFW 链接为 cmake 中的外部项目?

c++ - LLVM/Clang 是否支持弱链接的 'weak' 属性?

c++ - 您的计算机中缺少 api-ms-win-core-winrt-string-l1-1-0.dll

c++ - 如何编写在输入到达内核之前拦截输入的程序?

java - 如何在不同的gradle任务之间共享参数