CMake include_directories 和 target_include_directories 头文件的搜索顺序
2024-01-07 17:39:51
前言
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 中非常重要的指令,用于指定头文件的搜索路径。通过合理的使用这两个指令,我们可以帮助编译器快速找到所需的头文件,从而提高编译效率。