BUCK 构建工具允许我为库定义 header 命名空间。例如,如果我有一个名为 libA 的库,其目录结构为:
root
include
a.h
src
a.cpp
我可以在库中设置一个 header_namespace,比如 examples/liba
,这样在一个使用 libA 的独立项目中我可以:
#include "examples/liba/a.h"
这很好,因为它允许我在我的项目中保留一个简化的目录结构,同时还使我的包含以更具可读性的方式组织起来。
CMake 是否提供类似的东西?我还没有找到类似的东西。我的目标是拥有 BUCK 和 CMake 构建文件,以便在没有 java(BUCK 的依赖项之一)的系统上更容易构建。
最佳答案
不,CMake 没有这样的设施。
管理 header 的标准方法是以不太可能与其他代码冲突的方式在文件系统中组织它们。
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)
对于 header ,将所有内容安装在源包含目录和
install(TARGETS liba
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
用于实际的库目标(“libliba.a”或“libliba.so”)。更好的是使用来自 include(GNUInstallDirs)
的变量用于 GNU 标准文件夹名称。
在您的代码中,您始终只需以通常的无冲突方法引用代码:
#include "liba/a.h"
所以,文件或代码永远不应该有任何冲突,除非你真的不擅长命名!
关于c++ - 是否有与 BUCK 的 header_namespace 等效的 cmake?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45486407/