CMAKE:target_include_directories 和 include_directories

Ziq*_*Liu 5 cmake

target_include_directories我正在阅读一个大项目的 cmakelist 文件,并对和 的用法感到困惑include_directories

应该include_directories能够将所有头文件添加到编译器搜索的路径。但我仍然target_include_directories在子目录的 cmakelist 文件中看到一些内容,它们为特定目标指定了一些包含路径。

谁能解释一下这两个的用法吗?就我而言,添加头文件的所有路径就include_directories足够了。

小智 12

include_directories适用于特定 CMakeLists.txt 文件中的所有目标。例如,假设您有

include_directories( ../include
   ${SOME_OTHER_PATH}/include
)

add_library(math ${MATH_SOURCES})

target_include_directories(math 
    math_include
)

add_executable(calculator ${MYCALCULATOR_SOURCES})   

target_include_directories(calculator 
    calc_include
)
Run Code Online (Sandbox Code Playgroud)

calculator是一个可执行目标,math也是在同一 CMakeLists.txt 中定义的库目标。文件夹../include${SOME_OTHER_PATH}/include对两者都可见。-I../include -I<expanded-some-other-path>/include这意味着 cmake 会在编译这些目标的源代码时将该选项添加到这两个目标。

对于target_include_directories,包含路径calc_include仅适用于calculator目标并且math_include仅适用于math目标。根据指定,math_includecalc_include(通常)是包含 CMakeLists.txt 文件的同一文件夹中的子文件夹。