CMake添加C++头文件库

u91tlkcl  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(118)

我有几个库,是标题,只有由于被模板化。
我想在每个文件夹下提供一个CMakeLists.txt文件,将它们的包含文件夹导出为包含位置,如果这样做有意义的话。

add_library(htcw_io lib/htcw_io/src/io_stream.cpp)
target_include_directories(htcw_io PUBLIC
"${PROJECT_SOURCE_DIR}/lib/htcw_bits/include"
"${PROJECT_SOURCE_DIR}/lib/htcw_io/include"
"${PROJECT_BINARY_DIR}")

请注意,我必须包含lib/htcw_bits/include,尽管它是一个独立于htcw_io的库。这是因为它没有任何源文件-只有标题,所以我不能导出它本身作为一个库。
一个选择是包含一个空的cmake_dummy.cpp文件和htcw_bits以及其他类似的头文件库,只是为了给予CMake一些东西来绑定,但这似乎很草率。但是,如果这是解决方案,我会做的。我只想知道有没有更好的选择。
当然,他们已经想到了这个用例,我只是没有找对地方。

2wnc66cl

2wnc66cl1#

在CMake行话中,只有头文件的库被写成INTERFACE libraries
EX:

# Header only library
add_library(htcw_bits INTERFACE)
target_include_directories(htcw_bits INTERFACE
    "${PROJECT_SOURCE_DIR}/lib/htcw_bits/include"
)

add_library(htcw_io lib/htcw_io/src/io_stream.cpp)
target_include_directories(htcw_io PUBLIC
    "${PROJECT_SOURCE_DIR}/lib/htcw_io/include"
    "${PROJECT_BINARY_DIR}"
)

# By "linking" htcw_bits we avoid manually adding the include directory
# creating a nice abstraction
target_link_libraries(htcw_io PRIVATE htcw_bits)

相关问题