返回

CMake include_directories 和 target_include_directories 头文件的搜索顺序

后端

前言

CMake 是一个跨平台的构建系统,被广泛用于 C++ 项目的构建。在 CMake 中,include_directories 和 target_include_directories 这两个指令用于指定头文件的搜索路径。通过使用这两个指令,我们可以告诉编译器在哪里查找所需的头文件。

include_directories 指令

include_directories 指令用于指定头文件的全局搜索路径。这意味着,无论在哪个源文件中使用头文件,编译器都会在指定的路径中进行搜索。include_directories 指令的语法如下:

include_directories(path)

其中,path 是要指定的头文件搜索路径。可以是绝对路径,也可以是相对路径。例如,以下命令将指定当前目录和 /usr/include 目录作为头文件的搜索路径:

include_directories(. /usr/include)

target_include_directories 指令

target_include_directories 指令用于指定特定目标的搜索路径。这意味着,只有在编译该目标时,编译器才会在指定的路径中进行搜索。target_include_directories 指令的语法如下:

target_include_directories(target path)

其中,target 是要指定的头文件搜索路径的目标,path 是要指定的头文件搜索路径。可以是绝对路径,也可以是相对路径。例如,以下命令将指定 main 目标的头文件搜索路径为当前目录和 /usr/include 目录:

target_include_directories(main . /usr/include)

头文件的搜索顺序

编译器在搜索头文件时,会按照 CMake 脚本给出的 include 路径顺序从头到尾(从左往右)依次搜索。如果在前面找到了相应的头文件,就不会再继续搜索后面的路径了。因此,在设置头文件搜索路径时,需要将最有可能包含头文件的路径放在前面。

注意事项

  • 在使用 include_directories 和 target_include_directories 指令时,需要注意以下几点:
  • 确保指定的路径存在,否则编译器会报错。
  • 如果头文件路径中包含空格,需要用双引号将路径括起来。
  • 可以使用通配符来指定头文件搜索路径。例如,以下命令将指定所有以 .h 结尾的头文件的搜索路径:
include_directories(**/.h)

总结

include_directories 和 target_include_directories 这两个指令是 CMake 中非常重要的指令,用于指定头文件的搜索路径。通过合理的使用这两个指令,我们可以帮助编译器快速找到所需的头文件,从而提高编译效率。