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 <foo.h>"
开始按include_directories
的顺序在包含目录中搜索。
顺便说一句,这样做是一种不好的做法。应先搜索您的文件,然后搜索 lib 文件。更好的方法是做喜欢
include_directories(src)
include_directories(parent_of_lib)
将#include "foo.h"
或#include <foo.h>
用于您自己的包含文件,将#include <lib/foo.h>
用于第三方包含的文件。
【讨论】:
非常感谢您的回复。我用当前用例更新了我的问题。我不想重命名/移动我的文件!!! 您从头开始为自己制造了一个问题。试着想想你是如何在命令行中使用编译器解决这个问题的,有没有可能解决?以上是关于Cmake包含系统和程序文件的路径的主要内容,如果未能解决你的问题,请参考以下文章