如在Google C++ Style Guide中提到的那样,所有项目的头文件都应该作为项目源目录的后代列出,而不使用UNIX目录快捷方式。 (当前目录)或..(父目录)。我如何在我的项目中做到这一点,如下所述。
我的项目目录层次结构如下:
这些是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。我怎么能这样做?
答案 0 :(得分:1)
我过去所做的是将其设置在顶级CMakeLists.txt
(应该在您的GraphicsEngine
目录中):
SET(PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
INCLUDE_DIRECTORIES(
${PROJECT_ROOT}
)
根据this,CMAKE_CURRENT_SOURCE_DIR
是
这是当前处理的CMakeLists.txt所在的目录
请注意,通过以这种方式定义Project_Root
,您的GraphicsEngine
项目也可以从姐妹项目#include
标题添加到GraphicsEngine
。
希望这有帮助。