我有一个包含 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/