我想设置只有 header 的 C++(或 C)库项目,但找不到干净的方法。
经过一些搜索,我发现您无法使用 add_library
设置普通库来执行此操作,因为它需要可编译的源文件。
一种方法是使用 add_custom_target
代替,这样:
# Get all headers (using search instead of explicit filenames for the example)
file( GLOB_RECURSE XSD_HEADERS
*.hxx
)
add_custom_target( libsxsd SOURCES ${XSD_HEADERS} )
但这似乎并不完全在这里工作,因为我看不到在 VS2010 中生成的项目中的源代码。我不知道这是错误还是我做错了,或者是否有首选方法。
最佳答案
更新: CMake 将很快包含一个名为 INTERFACE 的库目标,该库目标非常适合仅包含 header 的项目。此功能目前在 master 分支中。 Reference .
按照您的建议使用命令 add_custom_target
对我有用(VS2010)。这些文件整齐地列在我的项目中,但它的缺点是您无法使用自定义目标定义任何“附加包含目录”。相反,我现在使用以下内容:
add_library(HEADER_ONLY_TARGET STATIC test1.hpp test2.hpp)
set_target_properties(HEADER_ONLY_TARGET PROPERTIES LINKER_LANGUAGE CXX)
这会将您的仅 header 项目设置为虚拟存档目标。不用担心,如果您尝试构建它,将不会生成实际的二进制文件(至少在 VS2010 和 Xcode 4 中不会)。命令 set_target_properties
在那里,因为 CMake 否则会提示它不能仅从 .hpp 文件推断目标语言。
https://stackoverflow.com/questions/5957134/