我有一个使用Visual Studio 2008构建的非常大的应用程序,旨在在Windows XP上运行。代码由一个包含六个独立项目的解决方案文件组成。我的工作是将此应用程序移植到Linux上。我以前从未做过这样的事情。
昨天我发现,我的公司希望这个代码在我完成后仍然可以编译运行在Windows上。我实现这一目标的第一个想法是使用预处理器语句,例如:
#define COMPILE_FOR_LINUX
然后,我可以使用类似于这样的预处理器块告诉编译器在头文件中包含哪些文件:
#ifdef COMPILE_FOR_LINUX
// include required Linux headers here and skip Windows header includes
#else
// include required Windows headers here and skip Linux header includes
#endif
在包含适当的文件后,我可以使用这样的块来封装所有平台相关的代码:
#ifdef COMPILE_FOR_LINUX
// compile Linux specific code used here.
#else
// compile Windows specific code used here.
#endif
为了让某人能够尽可能轻松地将应用程序编译到他们喜欢的平台上,我想在一个地方指定COMPILE_FOR_LINUX。但是,我不确定如何实现这一点。 我想到的一个想法是创建一个空的头文件,然后让解决方案中的每个文件都包含此头文件,如Visual Studio解决方案文件中所指定的包含路径。 对于Linux,我将有另一个版本的头文件,它定义了COMPILE_FOR_LINUX,然后让makefile指向此版本而不是空的版本。 但是,我确定这是一个非常粗糙的解决方案,而且我不确定它是否有效。 有人能提出一种更优雅的方法来全局定义或创建变量,以便解决方案中的每个文件都可以看到它吗?