在每个平台上包含来自同一文件的标头

Posted

技术标签:

【中文标题】在每个平台上包含来自同一文件的标头【英文标题】:Including header from the same file on every platform 【发布时间】:2015-03-28 15:33:13 【问题描述】:

我有一个文件 cpp-options.txt,我在其中编写了用于编译 C++ 程序的每个编译器选项。

我有 made an alias g+g++ @/path/to/cpp-options.txt $* ,所以每当我从计算机上的任何位置调用 g+ prog.cpp 时,程序都会使用该文件中的所有编译器选项进行编译。

现在我想添加另一个选项,它在选项文件中包含一个头文件header.h。此文件始终与cpp-options.txt 文件保存在同一目录中。 所以,现在cpp-options.txt 文件看起来像这样 -:

-Wall -Wextra.....-include /path/to/header.h

现在,此设置在 Windows 上完美运行,但在 Linux 上无法运行,因为 Linux 上选项文件的绝对路径是这样的 -:

/mnt/media......../absolute/path/to/header.h

因此,编译器会抱怨 Linux 上没有任何此类文件。 现在我知道了这个问题的一种解决方案,即在两个操作系统的PATH环境变量中包含保存这两个文件的文件夹,然后简单地写-:

-Wall -Wextra.....-include header.h

但是,我不想污染 PATH 变量。 有没有其他方法可以做到这一点?

【问题讨论】:

创建符号链接(或 Windows 上的分叉),以便两个系统上的路径相同? 我不明白。它是如何解决问题的? 如果路径在所有系统上都相同,那么您可以在参数文件中使用该路径。路径是文件的实际硬路径还是文件的一个或多个符号链接并不重要。 但这就是问题所在! Windows 上的任何文件都不能在 Linux 上具有相同的路径。它总是附加/mnt/media... 【参考方案1】:

我能做的最好的事情是创建另一个公用文件cpp-options-common.txt,它只包含编译器选项(-Wall、-Wextra、-std=c++14 等),并将-include /path/to/header.h 语句转换为cpp-options.txt 文件。 此外,我使用@ GCC 编译器指令将cpp-options-common.txt 文件导入cpp-options.txt 文件。

我的最终配置-:

cpp-options-common.txt -:(位于Windows分区)

-Wall -Wextra -Wfatal-errors ...

在 Windows 上 -:

cpp-options.txt -:

@path/to/cpp-options-common.txt
-include path/to/header.h

Linux -:

cpp-options.txt -:

@/media/Data/path/to/cpp-options-common.txt
-include /media/Data/path/to/header.h

【讨论】:

以上是关于在每个平台上包含来自同一文件的标头的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 上包含来自添加框架的标头

如何使用 SSIS 将 File1 标头中的单个值与 File2 中的总行数进行比较(csv)

为啥 Xcode 4 在每个标头中都包含 iostream?

如何确定函数来自哪个头文件?

在优胜美地的 GCC 编译期间不再可能包含 Carbon 标头?

如何包含来自同一项目的另一个文件的模块?