0

我正在尝试通过将所有标头放在单独的 cmake 标头项目中来重组我的 CMAKE 项目,并使用 target_link_libraries 将其添加到我的源 cmake 项目中。

在 cpp 源文件中包含标头时是否可以保留文件夹路径。

接口库中的头文件还应该能够使用头文件夹名称访问来自不同目录(在同一 cmake 接口项目中)的其他头文件。

预期的

#include "A/A.hpp"
#include "AGen/AGen.hpp"
#include "json/json.hpp"

当前工作的实现

#include "A.hpp"
#include "AGen.hpp"
#include "json.hpp"

我的界面cmake配置

    set(project_includes_internal
    ${CMAKE_CURRENT_LIST_DIR}/A
    ${CMAKE_CURRENT_LIST_DIR}/B
    ${CMAKE_CURRENT_LIST_DIR}/C
    )
    
    set(project_gen_includes
    ${CMAKE_CURRENT_BINARY_DIR}/include/AGen
    ${CMAKE_CURRENT_BINARY_DIR}/include/BGen
    ${CMAKE_CURRENT_BINARY_DIR}/include/CGen
    )
    
    set(project_dep_inludes
    ${CMAKE_HOME_DIRECTORY}/dep/nlohmann/json
    )
set(PROJECT_INCLUDES
        ${project_includes_internal}
        ${project_gen_includes}
        ${project_dep_inludes})

add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(${PROJECT_NAME}
        INTERFACE
        $<BUILD_INTERFACE:${PROJECT_INCLUDES}>
        $<INSTALL_INTERFACE:include>
        )

我的来源 cmake 配置

add_executable(${PROJECT_NAME}-bin ${PROJECT_TARGET_SOURCES})
target_link_libraries(${PROJECT_NAME}-bin
        PUBLIC
        ${ACTIVATION_PROJECT_INCLUDES_NAME})

也可以将所有必需的包含文件复制到构建目录中,以便在其他机器上安装时可以复制/发布这些文件。

4

0 回答 0