代码之家  ›  专栏  ›  技术社区  ›  William Bright

使用CMake从没有相对路径的子目录导入

  •  0
  • William Bright  · 技术社区  · 6 年前

    考虑到这样的项目结构:

    project/
        src/
            CMakeLists.txt
            foo.h
            main.cpp
            util/
                CMakeLists.txt
                bar.h 
    

    内部 bar.h 是否可以有一个包含声明作为 #include "foo.h" ?我见过 一些 通过Visual Studio中的“预编译头文件”配置来实现这一点的可能方法,但不直接使用CMake。

    0 回复  |  直到 6 年前
        1
  •  2
  •   Ivorne    6 年前

    好消息是CMake中的编译过程与 目标 依赖关系,而不是 文件 依赖性。因此,您不需要更改文件层次结构,只需要修改目标层次结构,但不要修改太多。

    1. 在src/cCMakeLists.txt文件中,创建额外的INTERFACE目标,例如 src_接口
      add_library( src_interface INTERFACE )
      
    2. 将您的include目录添加到其中:
      target_include_directories( src_interface INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} )
      
    3. 这需要在将util添加为子目录之前完成
      add_subdirectory( util )
      
    4. 在src/util/cCMakeLists.txt中,添加指向接口的链接:
      target_link_libraries( util_target PRIVATE src_interface )
      

    关于CMake中INTERFACE库的更多信息: https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries

    推荐文章