在每个平台上包含来自同一文件的标头
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
【讨论】:
以上是关于在每个平台上包含来自同一文件的标头的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SSIS 将 File1 标头中的单个值与 File2 中的总行数进行比较(csv)
为啥 Xcode 4 在每个标头中都包含 iostream?