使用cmake制作项目源目录的头文件后代

时间:2016-08-03 23:58:38

标签: c++ cmake

如在Google C++ Style Guide中提到的那样,所有项目的头文件都应该作为项目源目录的后代列出,而不使用UNIX目录快捷方式。 (当前目录)或..(父目录)。我如何在我的项目中做到这一点,如下所述。

我的项目目录层次结构如下:

  • GraphicsEngine
    • header_files.h
    • source_files.cc
    • CMakeLists.txt(1)
      • CMakeLists.txt(2)
      • header_files.h
      • source_files.cc
    • 相机
      • CMakeLists.txt(3)
      • header_files.h
      • source_files.cc
    • 核心
      • CMakeLists.txt(4)
      • header_files.h
      • source_files.cc

这些是CMakeLists.txt文件的内容:

CMakeLists.txt(1)

add_library(GraphicsEngineLib source_files.cc)
target_link_libraries(GraphicsEngineLib LightLib CameraLib CoreLib)
add_subdirectory(Light)
add_subdirectory(Camera)
add_subdirectory(Core)

CMakeLists.txt(2)

add_library(LightLib source_files.cc)

CMakeLists.txt(3)

add_library(CameraLib source_files.cc)

CMakeLists.txt(4)

add_library(CoreLib source_files.cc)

现在,例如,当我想将Camera文件夹中的头文件包含在Core文件夹中的文件中时,我必须使用../Camera/header_file.h,但我想使用GraphicsEngine / Camera / header_file.h。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我过去所做的是将其设置在顶级CMakeLists.txt(应该在您的GraphicsEngine目录中):

SET(PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")

INCLUDE_DIRECTORIES(
  ${PROJECT_ROOT}
)

根据thisCMAKE_CURRENT_SOURCE_DIR

  

这是当前处理的CMakeLists.txt所在的目录

请注意,通过以这种方式定义Project_Root,您的GraphicsEngine项目也可以从姐妹项目#include标题添加到GraphicsEngine

希望这有帮助。