我有一个包含 c++ 源文件和头文件的目录。我想创建一个 CMakeLists.txt 来将其构建为库,以便在将其作为子目录包含的其他 CMake 项目中使用。
结构:
example/
foo.h
foo.cpp
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是 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)
Run Code Online (Sandbox Code Playgroud)
我不想安装。这里的想法是该库将由其他 CMake 项目使用,而不是由整个系统使用。
理想情况下,foo.h 将显示在构建目录中的 libfoo.a 旁边。
我曾尝试将其称为“框架”,但没有成功;只做一个 macOS 框架。
我相信我可以临时操纵这个,但我认为有一个最佳实践。
也接受“这里有更好的方法”的答案......
更新
这可能有助于澄清我想如何将这个项目拖入另一个项目。我见过其他项目使用这样的东西:
add_subdirectory(<path_to_foo>/foo foo_build)
Run Code Online (Sandbox Code Playgroud)
这会导致 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})
Run Code Online (Sandbox Code Playgroud)
这可能有用。
| 归档时间: |
|
| 查看次数: |
12791 次 |
| 最近记录: |