我有一个包含C++源代码和头文件的目录。我想创建一个CMakeLists.txt文件,以将其构建为库,供其他将其作为子目录包含的CMake项目使用。
结构:
我遇到的问题是 CMake 似乎没有把 foo.h 放在任何位置,因此让父级 CMake 知道如何找到头文件令我困扰。
以下是我的当前 CMakeLists.txt:
我不想安装。这里的想法是该库将被其他CMake项目使用,而不是整个系统使用。
理想情况下,foo.h应该出现在构建目录中libfoo.a旁边。
我尝试称其为“框架”,但没有成功;那只会使它成为macOS框架。
我相信我可以通过权宜之计来解决这个问题,但我认为最好的做法已经存在了。
也欢迎回答“有更好的方法”。
更新:
可能有助于澄清我如何想将此项目合并到另一个项目中。我见过其他项目使用类似以下内容:
这段文本的意思是:将foo构建到一个子目录中,这样就可以使用“foo_build”引用库,看起来很干净。但是,仍然需要指向原始的include目录以获取.h文件,这让我感觉好像还缺少了些什么。似乎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旁边。
我尝试称其为“框架”,但没有成功;那只会使它成为macOS框架。
我相信我可以通过权宜之计来解决这个问题,但我认为最好的做法已经存在了。
也欢迎回答“有更好的方法”。
更新:
可能有助于澄清我如何想将此项目合并到另一个项目中。我见过其他项目使用类似以下内容:
add_subdirectory(<path_to_foo>/foo foo_build)
这段文本的意思是:将foo构建到一个子目录中,这样就可以使用“foo_build”引用库,看起来很干净。但是,仍然需要指向原始的include目录以获取.h文件,这让我感觉好像还缺少了些什么。似乎cmake应该有一个干净的解决方案。