CMake的几种Include
include_directories()
target_include_directories()
add_executable( xx.cpp xx.h)
这三种方式都可以对当前项目添加引用路径。
include_directories()
include_directories()的影响范围最大,可以为CMakelists.txt后的所有项目添加头文件目录
一般写在最外层CMakelists.txt中影响全局
target_include_directories()
target_include_directories()的影响范围可以自定义。如加关键子PRIVATE或这PUBLIC。
一般引用库路径使用这个命令,作为外部依赖项引入进来,target是自己项目生成的lib。
如:
project(myLib)
target_include_directories(myLib PRIVATE ${OpenCV_Include_dir})
我们将${OpenCV_Include_dir}头文件库路径只添加到了myLib项目
add_executable()
add_executable( )中添加的引用路径一般是当前目录下的源文件对应的头文件。是生成项目时引入的头文件。
这种方式一般用于自己写的或某项目需要的头文件,这种方式需要加添加文件名字,而非头文件目录
如:
project(addFunc)
add_executable(addFunc addFunc.h addFunc.cpp)
嵌套头文件的引用问题。
在子项目中,include的用法可以帮助当前环境找到头文件,但在外部的项目引用子项目时,子项目中的include的相关命令对外部项目无效,外部项目的引用只与他自己的include命令相关,因此,在子项目中的源文件中尽量使用绝对路径的文件。且在子项目的CMakeLists中尽量不要使用include_directories,因为它只针对子项目,外部项目没接受到include的文件,就会报引入错误。
如:
错误示范:
子项目:
include_directories(“…/OrthophotoCU”)
源文件:
#include “global.h”
正确示范:
子项目:不加引入路径
源文件:
#include “…/OrthophotoCU/global.h”
这样外部项目引入子项目时,就可以根据子项目的路径找到相对位置的头文件了。如果是错误情况,引入了子项目头文件,在子项目的相对路径下没有"global.h"。