首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CMake目标INTERFACE_INCLUDE_DIRECTORIES是否自动添加到父INCLUDE_DIRECTORIES?

在CMake中,INTERFACE_INCLUDE_DIRECTORIES是一个目标属性,用于指定目标的头文件搜索路径。当一个目标被设置了INTERFACE_INCLUDE_DIRECTORIES属性后,它的头文件搜索路径会被自动添加到依赖该目标的其他目标的编译选项中。

然而,INTERFACE_INCLUDE_DIRECTORIES并不会自动添加到父目录的INCLUDE_DIRECTORIES属性中。INCLUDE_DIRECTORIES属性是用于指定当前目录下的头文件搜索路径,而不会自动继承子目录的头文件搜索路径。

如果希望将INTERFACE_INCLUDE_DIRECTORIES添加到父目录的INCLUDE_DIRECTORIES属性中,可以使用CMake的变量和函数来实现。首先,将INTERFACE_INCLUDE_DIRECTORIES的值存储到一个变量中,然后使用PARENT_SCOPE选项将该变量传递给父目录。在父目录中,可以使用SET命令将该变量的值添加到INCLUDE_DIRECTORIES属性中。

下面是一个示例:

子目录CMakeLists.txt:

代码语言:txt
复制
target_include_directories(MyTarget INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include)

父目录CMakeLists.txt:

代码语言:txt
复制
add_subdirectory(subdirectory)
get_target_property(MyTarget_INCLUDE_DIRECTORIES MyTarget INTERFACE_INCLUDE_DIRECTORIES)
set(MyTarget_INCLUDE_DIRECTORIES ${MyTarget_INCLUDE_DIRECTORIES} PARENT_SCOPE)

这样,INTERFACE_INCLUDE_DIRECTORIES的值就会被添加到父目录的INCLUDE_DIRECTORIES属性中,从而使得父目录下的其他目标也能够找到该目录的头文件。

腾讯云相关产品和产品介绍链接地址:

腾讯云产品:云服务器CVM 产品介绍链接地址:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Caffe: Could not find PROTOBUF Compiler(Profobuf 3.0 above)

在用cmake生成Caffe工程文件的时候,如果你使用Protobuf 3.0以上的版本,cmake可能会产生如下的报错: CMake Error at cmake/ProtoBuf.cmake:18...Dprotobuf_MODULE_COMPATIBLE=on 这个办法的好处是不用修改caffe的代码 修改CMakeLists.txt 也可以在直接修改Caffe根目录下的CMakeLists.txt 打开CMakeLists.txt,查找是否有类型下面这行代码...libprotobuf-lite STATIC IMPORTED) set_target_properties(protobuf::libprotobuf-lite PROPERTIES # 指定 include 文件夹 INTERFACE_INCLUDE_DIRECTORIES...target_link_libraries( your_target,protobuf::libprotobuf-lite) 也许你会问那还需要调用include_directories添加protobuf...不需要了,your_target指定连接一个imported target时,会自动把imported target的INTERFACE_INCLUDE_DIRECTORIES 属性指定的include

4.7K60
  • MSVCMinGW中导入glog静态库的正确方式

    GFLAGS_DLL_DECLARE_FLAG=;GFLAGS_DLL_DEFINE_FLAG=;GLOG_NO_ABBREVIATED_SEVERITIES;GOOGLE_GLOG_DLL_DECL=" INTERFACE_INCLUDE_DIRECTORIES...logging.h PATHS ${GLOG_ROOT_DIR}/include) find_library(GLOG_LIBRARY glog PATHS ${GLOG_ROOT_DIR}/lib) ... include_directories...属性中指定了上面4个宏定义,所以聪明的cmake在生成Makefile时会自动在your_project target的编译选项中加入-DGFLAGS_DLL_DECLARE_FLAG -DGFLAGS_DLL_DEFINE_FLAG...-DGLOG_NO_ABBREVIATED_SEVERITIES -DGOOGLE_GLOG_DLL_DECL 所以就不需要再执行include_directories(${GLOG_INCLUDE_DIR...如下是cmake生成的编译工程文件(flags.make)的样例,可以看到CXX_DEFINES 中已经自动添加了上面的4个宏定义,并且将glog include文件夹也自动加到了CXX_INCLUDES

    2.7K60

    CMAKE使用手记

    文章目录 致谢 编译与源代码分离 CMakeLists.txt 自动继承目录 CMake 脚本基本语法 注释 指令 变量 在字符串中展开变量 转义字符串 脚本流程控制 条件语句 循环语句 常用命令...sourceN 编译出一个库文件且命名 指定某个目标(可执行文件或者库文件)依赖于其他的目标 添加一个需要进行构建的子目录 指定 target 需要链接 设定变量的值为 移除变量 输出信息 设定目录...---- CMakeLists.txt 自动继承目录 子目录的 CMakeLists.txt 自动继承了目录里的 CMakeLists.txt 所定义的一切宏、变量。这极大地减少了重复的代码。...) include_directories(${PROJECT_SOURCE_DIR}/include/server/db) include_directories(${PROJECT_SOURCE_DIR...用于设置 LIBRARY 目标的输出路径 ---- CMAKE的局限性 CMake 并不遵守 GNU 规则。

    52720

    万字总结编译利器CMake,从入门到项目实战演练

    添加系统自省(步骤 4) 接下来,我们来考虑添加一些有些目标平台可能不支持的代码。在这个样例中,我们将根据目标平台是否有log和exp函数来添加我们的代码。...在许多目标属性(例如LINK_LIBRARIES,INCLUDE_DIRECTORIES,COMPLIE_DEFINITIONS等)的上下文中允许生成器表达式。...这是通过将以下内容添加到顶级CMakeLists.txt的底部来完成的: 安装(导出 MathFunctionsTargets 文件 MathFunctionsTargets.cmake 目标...如果一切设置正确,您将看到CMake将生成如下错误: 目标“MathFunctions”INTERFACE_INCLUDE_DIRECTORIES 属性包含 路径: “/Users/robert/...自动工具 am2cmake 可以将 autotools 系的项目转换到 CMake,这个工具的一个成功案例是 KDE 。

    1.2K00

    跨平台编译工具-CMake的语法特性与常用变量

    指定工程的名称为HELLO project(HELLO) set : 显示定义变量 # 定义SRC 变量值为:hello.cpp main.cpp set(SRC hello.cpp main.cpp) include_directories.../include 路径添加到头文件搜索路径中 include_directories(/usr/include ..../lib 路径添加到库文件搜索路径中 link_directories(/usr/lib ....hello动态库文件链接到可执行文件main target_link_libraries(main hello) add_subdirectory : 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置...中需要有一个 CMakeLists.txt add_subdirectory(src) aux_source_directory : 发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表

    1.2K10

    CMake学习笔记(三)——以笔者的Robosub竞赛为例

    /IPCServer) 此段代码下,定义了项目名称IPCSocket后,CMake便自动生成了两个变量: // 二进制文件保存路径; PROJECT_BINARY_DIR = IPCSocket_BINARY_DIR...最低版本要求 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # 添加源文件中的#include路径 INCLUDE_DIRECTORIES(./) INCLUDE_DIRECTORIES...后面TARGET_LINK_LIBRARIES命令便通过链接先前的库文件来生成目标文件,该条命令主要有几部分组成: ncclient_image:生成的目标文件名称 由于先前存在指令ADD_LIBRARY...最低版本要求 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # 添加源文件中的#include路径 INCLUDE_DIRECTORIES(./) INCLUDE_DIRECTORIES...,有两个参数如下: IPCImageClient:生成目标二进制可执行文件名称 .

    1.2K100

    如何对 Neuron 源码进行交叉编译

    当指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成可执行文件。交叉编译链的重点在于交叉编译器,使用不同平台的编译器用来生成可在该平台运行的可执行程序。...# 目标系统名称set(CMAKE_SYSTEM_NAME Linux)set(COMPILER_PREFIX arm-linux-gnueabihf)# 目标平台架构set(CMAKE_SYSTEM_PROCESSOR...})include_directories(SYSTEM ${CMAKE_STAGING_PREFIX}/include)include_directories(SYSTEM ${CMAKE_STAGING_PREFIX...参数选择依赖库文件查找的位置,该参数在 .cmake 文件中配置if (CMAKE_STAGING_PREFIX) # 当进行交叉编译时,指定头文件的搜索路径 include_directories...target_sources(neuron PRIVATE ${NEURON_SOURCES}) # 将头文件库路径添加到 neuron 中target_include_directories(neuron

    1.2K50

    cmake 添加头文件目录,链接动态、静态库

    cmake 添加头文件目录,链接动态、静态库 cmake 添加头文件目录,链接动态、静态库 1. 添加头文件目录INCLUDE_DIRECTORIES 2....为工程生成目标文件 7.最后贴一个完整的例子 参考资料 最近需要将Windows10系统下使用VS2017编译的VC++项目放到CentOS Linux服务器上跑,最简单的当然是使用cmake作为项目编译和管理工具了...添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])...会自动去所包含的目录搜索link_libraries(iconv)# 传入变量link_libraries(${RUNTIME_LIB}) # 也可以链接多个link_libraries("/opt/MATLAB...简单的例子如下: add_executable(demo main.cpp ) 7.最后贴一个完整的例子 cmake_minimum_required (VERSION 2.6) INCLUDE_DIRECTORIES

    24.8K11
    领券