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

时间:2018-01-22 12:17:00

标签: c++ c cmake

我想知道是否有可能配置cmake,如果#include<...>#include "..."包含标题文件,可能会有所不同吗?

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

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

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

它始终从第一个include_directories()命令

加载文件
include_directories(src)
include_directories(lib)

修改

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

我想要的只是:

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

我在IDE Keil中使用它就像这样,但我不知道是否可以用cmake完成

1 个答案:

答案 0 :(得分:0)

更改包含订单

    {
  "capabilities": [
    {
      "seleniumProtocol": "WebDriver",
      "browserName": "firefox",
      "maxInstances": 3,
      "version": "57",
      "platform": "win7"
    },
    {
      "seleniumProtocol": "WebDriver",
      "browserName": "internet explorer",
      "maxInstances": 1,
      "version": "11",
      "platform": "win7"
    },
    {
      "seleniumProtocol": "WebDriver",
      "browserName": "chrome",
      "maxInstances": 4,
      "version": "62",
      "platform": "win7"
    }
  ],
  "loadedFromFile": "node_5555.json",
  "proxy": "com.groupon.seleniumgridextras.grid.proxies.SetupTeardownProxy",
  "servlets": [],
  "maxSession": 7,
  "port": 5555,
  "register": true,
  "unregisterIfStillDownAfter": 10000,
  "hubPort": 4444,
  "hubHost": "xxxxyyyyy.com",
  "registerCycle": 5000,
  "nodeStatusCheckTimeout": 10000,
  "custom": {},
  "downPollingLimit": 0
}

您需要将整个代码放在include_directories(lib) include_directories(src) 中。在这种情况下,src启动搜索当前文件的同一目录中的搜索文件。 #include "foo.h"开始按#include <foo.h>"的顺序搜索包含目录。

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

include_directories

对您自己的文件使用include_directories(src) include_directories(parent_of_lib) #include "foo.h",对第三方包含的文件使用#include <foo.h>