Kla*_*aim 39 c c++ build cmake
标题说明了一切:我想设置仅限标题的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} )
Run Code Online (Sandbox Code Playgroud)
但这似乎并不完全在这里工作,因为我看不到VS2010中生成的项目中的源代码.我不知道这是一个错误,或者我做错了,或者是否有一个首选的方法,所以如果你有一个简单的解决方案,请成为我的客人.
Fre*_*und 26
更新: CMake将很快包含一个名为INTERFACE的库目标,非常适用于仅限标题的项目.此功能目前在主分支中.参考.
建议使用命令add_custom_target(VS2010).这些文件整齐地列在我的项目中,但它的缺点是你不能用自定义目标定义任何"附加包含目录".相反,我现在使用以下内容:
add_library(HEADER_ONLY_TARGET STATIC test1.hpp test2.hpp)
set_target_properties(HEADER_ONLY_TARGET PROPERTIES LINKER_LANGUAGE CXX)
Run Code Online (Sandbox Code Playgroud)
这会将仅标题项目设置为虚拟归档目标.不要担心,如果你应该尝试构建它,不会生成实际的二进制文件(至少在VS2010和Xcode 4中不会).命令set_target_properties就在那里,因为CMake会抱怨它不能仅从.hpp文件中推断出目标语言.
您可以使用最近的Interface Library功能执行此操作:
add_library(mylib INTERFACE)
target_include_directories(mylib INTERFACE my_include_dir1 my_include_dir2)
Run Code Online (Sandbox Code Playgroud)
这将创建一个没有任何源文件的库目标,并将include目录添加到目标的INTERFACE_INCLUDE_DIRECTORIES属性中.这意味着链接到此库的任何目标都将-I在构建时将这些目录作为包含paths().
例如,要将库与可执行目标一起使用,只需执行以下操作:
add_executable(myexec ${MY_SOURCES})
target_link_libraries(myexec mylib)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16983 次 |
| 最近记录: |