Cmake包含系统和程序文件的路径

Posted

技术标签:

【中文标题】Cmake包含系统和程序文件的路径【英文标题】:Cmake include path for system and program files 【发布时间】:2018-01-22 12:17:00 【问题描述】:

我想知道是否有可能配置 cmake,如果头文件包含在 #include<...>#include "..." 中,是否有可能有所作为?

假设我有一个这样的项目:

src
   foo.h
   foo.c
lib
   foo.h
   foo.c

如何通过写入#include "foo.h" 来添加文件src/foo.h,如果头文件包含在#include <foo.h> 中,则加载位置lib/foo.h 的文件?

它总是从第一个include_directories() 命令加载文件

include_directories(src)
include_directories(lib)

编辑

我目前在项目中遇到的问题: 我有一个名为string.h 的文件。其中包含一些用于自定义文本处理的功能。现在我遇到的问题是,如果我写#include <string.h>,我的自定义文件已加载,但我希望系统文件为 string.h。我不想重命名我的自定义文件,也不想将它移动到文件夹中以包含它,例如 #include "custum/string.h"

我想要的是:

#include <string.h> // load file from system library
#include "string.h" // load my custom file

我在IDE Keil里面是这样用的,不知道cmake能不能做到

【问题讨论】:

你可以怀疑,因为它们使用相同的搜索路径 请务必仔细阅读this question 中的second 和third answer。在那之后,希望你确信你在这里尝试做的是一个非常糟糕的主意。 【参考方案1】:

更改包括订单

include_directories(lib)
include_directories(src)

您需要将整个代码放在src 中。在这种情况下,#include "foo.h" 在解析当前文件的同一目录中开始搜索文件。 #include &lt;foo.h&gt;" 开始按include_directories 的顺序在包含目录中搜索。

顺便说一句,这样做是一种不好的做法。应先搜索您的文件,然后搜索 lib 文件。更好的方法是做喜欢

include_directories(src)
include_directories(parent_of_lib)

#include "foo.h"#include &lt;foo.h&gt; 用于您自己的包含文件,将#include &lt;lib/foo.h&gt; 用于第三方包含的文件。

【讨论】:

非常感谢您的回复。我用当前用例更新了我的问题。我不想重命名/移动我的文件!!! 您从头开始为自己制造了一个问题。试着想想你是如何在命令行中使用编译器解决这个问题的,有没有可能解决?

以上是关于Cmake包含系统和程序文件的路径的主要内容,如果未能解决你的问题,请参考以下文章

CMake 和绝对标题路径

CMake 包含路径 - 依赖于外部库的库

在 CMake 中获取包含库的包含路径列表

CMake:Include vs add_subdirectory:相对头文件路径

cmake find_path 其中路径包含版本号

VS2019+cmake 方式添加ffmpeg库文件,cmake添加lib文件dll文件,包含目录示例