命令格式
target_include_directories( [SYSTEM] [AFTER|BEFORE]
[items1...]
[ [items2...] ...])
该命令可以指定目标(exe或者so文件)需要包含的头文件路径。
命名的<目标>必须是由add_executable()或add_library()之类的命令创建的,并且不能是ALIAS目标。通过显式地使用AFTER或BEFORE,就可以在附加和预挂之间进行选择,而不是依赖默认值。
需要INTERFACE、PUBLIC和PRIVATE关键字来指定以下参数的范围。PRIVATE和PUBLIC项将填充
同时,target_include_directories的参数可以使用语法为$<…>的“生成器表达式”。
我们将${OpenCV_Include_dir}头文件库路径只添加到了myLib项目
project(myLib)
target_include_directories(myLib PRIVATE ${OpenCV_Include_dir})
生成器表达式的实例
target_include_directories(mylib PUBLIC
$
$ # /include/mylib
)
有如下文件的目录,一个math库,main.cc文件来调用math库,math库实现了一个整数的幂运算
MathFunctions.h
#ifndef POWER_H
#define POWER_H
extern double power(double base, int exponent);
#endif
MathFunctions.cc
/**
* power - Calculate the power of number.
* @param base: Base value.
* @param exponent: Exponent value.
*
* @return base raised to the power exponent.
*/
double power(double base, int exponent)
{
int result = base;
int i;
if (exponent == 0) {
return 1;
}
for(i = 1; i < exponent; ++i){
result = result * base;
}
return result;
}
math下的CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project(MathFunctions)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 指定生成 MathFunctions 链接库
add_library (MathFunctions ${DIR_LIB_SRCS})
main.cc
#include
#include
#include "MathFunctions.h"
int main(int argc, char *argv[])
{
if (argc < 3){
printf("Usage: %s base exponent \n", argv[0]);
return 1;
}
double base = atof(argv[1]);
int exponent = atoi(argv[2]);
double result = power(base, exponent);
printf("%g ^ %d is %g\n", base, exponent, result);
return 0;
}
同级目录下的CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo3)
# 添加 math 子目录,输出.a文件到output目录
add_subdirectory(math output)
# 指定生成目标
add_executable(Demo main.cc)
# 将子目录的头文件包含到目标中
target_include_directories(Demo PUBLIC math)
# 添加链接库
target_link_libraries(Demo MathFunctions)
编译,运行
参考:
target_include_directories — CMake 3.22.0 Documentation
CMake的几种Include_fb_help的专栏-CSDN博客
cmake:target_** 中的 PUBLIC,PRIVATE,INTERFACE - 知乎