在CMake项目中带有前缀的头文件

fhe*_*eke 9 build cmake

我已经设置了一个CMake项目,其目录结构如下所示:

src/
--CMakeLists.txt
--libA/
----CMakeLists.txt
----foo.h
----foo.cpp
--main/
----CMakeLists.txt
----main.cpp
Run Code Online (Sandbox Code Playgroud)

src/CMakeLists.txt使用 add_subdirectory拉进来libAmain.libA/CMakeLists.txt用于add_library定义一个名为的库libA,foo.h通过它导出target_include_directories.如果我现在对链接libAmain使用target_link_library,我可以包括foo.h通过#include <foo.h>main.cpp.

问:是否有可能提供的公共接口libA与一个前缀,这样我可以(而且必须)写#include <libA/foo.h>main.cpp呢?

squ*_*les 2

您可以在调用中使用根源目录(或作为 的父目录的其他目录libAtarget_include_directories()。这将允许针对另一个目录(在本例中为)INTERFACE_INCLUDE_DIRECTORIES定义目标属性。所以它看起来像这样:CMAKE_SOURCE_DIR

libA/CMakeLists.txt

add_library(libA foo.cpp)
# Define the include files with respect to the directory above this.
target_include_directories(libA PUBLIC ${CMAKE_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

文件main/main.cpp

add_library(libA foo.cpp)
# Define the include files with respect to the directory above this.
target_include_directories(libA PUBLIC ${CMAKE_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)