cmake命令之target_include_directories

一、介绍

命令格式

target_include_directories( [SYSTEM] [AFTER|BEFORE]
   [items1...]
  [ [items2...] ...])

该命令可以指定目标(exe或者so文件)需要包含的头文件路径。

命名的<目标>必须是由add_executable()或add_library()之类的命令创建的,并且不能是ALIAS目标。通过显式地使用AFTER或BEFORE,就可以在附加和预挂之间进行选择,而不是依赖默认值。

需要INTERFACE、PUBLIC和PRIVATE关键字来指定以下参数的范围。PRIVATE和PUBLIC项将填充的INCLUDE_DIRECTORIES属性。PUBLIC和INTERFACE项将填充的INTERFACE_INCLUDE_DIRECTORIES属性。具体的介绍详见private,public,interface的使用

同时,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库实现了一个整数的幂运算

cmake命令之target_include_directories_第1张图片

 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)

编译,运行

cmake命令之target_include_directories_第2张图片

 

参考:

target_include_directories — CMake 3.22.0 Documentation

CMake的几种Include_fb_help的专栏-CSDN博客

cmake:target_** 中的 PUBLIC,PRIVATE,INTERFACE - 知乎

你可能感兴趣的:(Cmake,c++,elementui,开发语言)