Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 处理#包括不同平台上的路径_C++_Linux_Windows_Git_Ncurses - Fatal编程技术网

C++ 处理#包括不同平台上的路径

C++ 处理#包括不同平台上的路径,c++,linux,windows,git,ncurses,C++,Linux,Windows,Git,Ncurses,我正在用NCurses在Arch Linux平台上开发一个软件。它在全局标题中有一个#include 我的合作者在Windows中工作,并用Cygwin模拟bash shell。但是,cygwin安装的ncurses库必须使用#include。这是微不足道的改变,但我们的Git历史可能包括一行来回改变多次,如果我们中的一个忘记了这似乎是愚蠢的 是否有某种预处理器检查可以使用适当的路径?正如@BoBTFish所说,您应该在Makefile中指定include路径(每个平台不同)。如果没有,您可以使

我正在用NCurses在Arch Linux平台上开发一个软件。它在全局标题中有一个
#include

我的合作者在Windows中工作,并用Cygwin模拟bash shell。但是,cygwin安装的ncurses库必须使用
#include
。这是微不足道的改变,但我们的Git历史可能包括一行来回改变多次,如果我们中的一个忘记了这似乎是愚蠢的


是否有某种预处理器检查可以使用适当的路径?

正如@BoBTFish所说,您应该在Makefile中指定include路径(每个平台不同)。如果没有,您可以使用宏
\uuuuucygwin\uuuuuu
(或者
\uuuuuuucygwin32\uuuuuuuuu
,不确定哪一个会起作用)来检测您是否正在使用
CYGWIN
,如

#ifdef __CYGWIN__
#include <ncurses/ncurses.h>
#else
#include <ncurses.h>
#endif
\ifdef\uuucygwin__
#包括
#否则
#包括
#恩迪夫

有关更多详细信息,请参阅。

这应该是makefile(或windows等效文件)的一部分。因此,使用gcc,您可以使用
-I
选项来指定include目录。因此,在一台机器上可以使用
-I/path/to/ncurses/include
构建,在另一台机器上可以使用
-I/different/ncurses/include/ncurses
,这样您就可以在这两台机器上都使用
\include
。请注意,这是获取所有必要的gcc标志(包括路径、库路径等)的好方法,它默认安装在我尝试使用过的每个Linux发行版上。这是GNU autotools设计用来解决的问题类型。与其说是makefile,还不如说是您正在构建的配置。您必须以某种方式配置构建(显然是在构建时)。我的观点是,如果可能的话,这个差异应该在那个级别处理,而不是在代码中处理。当你添加第三个平台时,你也会添加第三个,
#ifdef
,对,我同意,我也会在特定的机器上使用
-I/path/to/my_ncurses
,只是提供了一个替代方案,以防他们不想调整配置文件。另一方面,有时您必须在
Makefile
(或配置文件)本身进行此类检查,但我再次同意,代码应该尽可能保持干净。#ifdef是邪恶的,很难维护。在它所属的makefile/cmake/autotools/scons/…中修复此问题。