如何操纵与CMake和CMakeLists.txt链接的标题

时间:2018-01-23 17:32:30

标签: cmake clion

有没有办法在CMakeLists.txt的某个指令中为#included资源创建别名?

我正在寻找一种在CMakeLists.txt中定义内容的方法,以便出现任何全局资源,例如

#include <some/global/dependency/file.h>

将别名为正确的资源,因此CMake也会在以下位置查找

#include "../file/is/here/file.h"
#include "file.h"
#include <alias.h> 

为什么?

我正在开发一个带有容器化构建系统的非常复杂的项目。意味着,应该进行大量的手工工作,以使项目在任何IDE中都能很好地运行。实际上,主项目中有很多子项目被单独编译,具有大量专用配置。

我使用CLion作为我的IDE。 CLion支持CMake开箱即用,但我的项目没有使用cmake :)我通过使用include_directories()指令简单地包含很多文件夹(带有头文件)创建了自定义CMakeLists.txt文件,现在它非常有用好。它能够识别符号/导航/宏生成并构建包含文件的良好索引。 但我有这个问题,在某些文件中,CLion无法识别文件路径,因为#include指的是我的真实文件系统中不存在的全局(预构建/容器化)路径/文件,但通常,任何这种资源存在于不同路径下的项目中。所以我想知道是否有办法指示CMake执行以下操作:

  1. 如果被问及{路径
  2. 中的#include内容
  3. 那么首先在YYY路径或ZZZ路径等处寻找它&#39; ...
  4. 如果在上面的步骤2中找不到资源,请在XXX路径下查找
  5. 如果您可以通过更好的术语编辑来帮助我改进问题和标题,我将不胜感激......&#39; ...

1 个答案:

答案 0 :(得分:1)

CMake本身并不提供编译器,它甚至不是构建工具。因此,如果编译器不能替换包含目录&#34; on fly&#34;,CMake就不能这样做。

如果您允许复制标题 - 请将它们复制到正确的位置,这样include_directories()就可以了。

如果您被允许复制和修改源,您可以将它们复制到新位置并在它们上运行扫描程序,这会修改#include指令。

否则你运气不好。