【问题标题】:INTERFACE_INCLUDE_DIRECTORIES gives empty sting even after target_include_directories [duplicate]即使在 target_include_directories [重复] 之后,INTERFACE_INCLUDE_DIRECTORIES 也会产生空刺
【发布时间】:2022-01-26 08:07:41
【问题描述】:

我在打印 INTERFACE_INCLUDE_DIRECTORIES 之类的变量时遇到问题,我将展示我编写的简单 CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(Library)

add_library(hello src/hello.cpp)
target_include_directories(hello PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

message(STATUS "The interface_include_directories : ${INTERFACE_INCLUDE_DIRECTORIES}")

如上图,${CMAKE_CURRENT_SOURCE_DIR}/include应该在INTERFACE_INCLUDE_DIRECTORIES之后target_include_directories, 但是,它会打印一个空字符串。

我想知道是否有打印与特定库相关的包含路径,例如在这种情况下hello

【问题讨论】:

    标签: cmake


    【解决方案1】:

    ${CMAKE_CURRENT_SOURCE_DIR}/include 应该在 target_include_directories 之后的 INTERFACE_INCLUDE_DIRECTORIES 中

    它应该在INTERFACE_INCLUDE_DIRECTORIES目标属性中,而不是在变量中。

    如果无论如何要打印与特定库相关的包含路径,你好,例如在这种情况下。

    get_target_property(var hello INTERFACE_INCLUDE_DIRECTORIES)
    message(STATUS "${var}")
    

    【讨论】:

    • 谢谢,如果我想打印cmake中的所有包含路径(包括c++标准路径)怎么办?
    • eerrmm,为什么?您必须找到包含路径的所有变量并打印它们。您可以详细编译以查看传递给编译器的内容。 c++ standard ones 没有“标准”,C++ 标准没有提到任何包含路径。有系统特定的,以防查阅您的操作系统文档(Linux 上的 FHS 和 POSIX),有编译器特定的包含路径,以防查阅编译器文档(在 GCC 上使用 gcc -v 编译代码以查看它包含的内容)。跨度>
    • 因为使用target_link_directories在PUBLIC模式下标记名为hello的库后,在另一个文件夹中,有main.cpp使用了这个hello库,当包含hello库的头文件时,我开始写#include 而不是我不明白的#include “hello.h”。据我所知,括号一个意味着它会搜索系统或编译器预定义的路径,所以我想知道,target_link_directories 有什么不同吗?
    • which I don’t understand我只能推荐一位导师或阅读some booksdoes target_link_directories makes some difference? 不,target_link_directories 不影响编译器包含搜索路径,它为库搜索路径添加了一个路径。 target_include_directories 向编译器添加路径包含搜索路径,这会影响#include <hello.h>#include "hello.h"
    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多