不,CMake 没有这样的设施。
管理标头的标准方法是在文件系统中组织它们,使它们不太可能与其他代码冲突。
root
include
liba
a.h
src
a.cpp
那么这是一个简单的问题:
include_directories(include)
或更好,
target_include_directories(liba PUBLIC include)
或者,最现代的,
target_include_directories(liba PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:include>")
它只是说在包含路径上对使用当前源目录中子目录内容的任何人以及安装子目录liba
内容的任何人都可用(相对于安装前缀进行解释)。include
liba
include
然后安装通常是这样的:
install(DIRECTORY include/
DESTINATION include)
对于标题,在源包含目录下安装所有内容和
install(TARGETS liba
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
对于实际的库目标(“libliba.a”或“libliba.so”)。更好的是使用来自include(GNUInstallDirs)
GNU 标准文件夹名称的变量。
在您的代码中,您始终只需以通常的无冲突方法引用代码:
#include "liba/a.h"
所以,文件或代码不应该有任何冲突,除非你真的不擅长命名!