具有大量代码文件的C ++条件编译

时间:2013-01-08 03:25:46

标签: c++ conditional-compilation multifile

我想在Windoes和Linux上编译并运行一份C ++代码。所以我需要使用条件编译(CC)。然而,它遇到了如何在大量代码文件中使用CC 的问题。

,例如,我有:

//A.cpp
#define _WINDOWS_
#ifdef _WINDOWS_
#include <windows.h>
//some code for windows
#else
#include <pthread.h>
//some code for linux
#endif

我也有B.cpp,C.cpp ......

我应该在每个文件中写“#define _WINDOWS_”,还是有更好的方法?

我试图这样做: 1.创建一个头文件Platform.h

#ifndef _PLAT_
#define _PLAT_
#define _WINDOWS_
#endif

2。包括文件Platform.h,如:

//A.cpp
#include "Platform.h"
#ifdef _WINDOWS_
#include <windows.h>
//some code for windows
#else
#include <pthread.h>
//some code for linux
#endif

3。它编译错误!在包含之前可能包括“Platform.h”导致错误。

感谢。

2 个答案:

答案 0 :(得分:2)

使用编译器中的一些预定义宏。

http://sourceforge.net/p/predef/wiki/OperatingSystems/

#ifdef _WIN32
// Code specific to Windows.
#elif defined __linux__ // Many variants; check the link above.
// Code specific to Linux.
#else
// Portable code.
#endif

这适用于大多数情况。

请注意,大多数这些宏用于检测主机操作系统(即构建程序的系统),而不是目标操作系统(运行结果程序的系统)。然而,通常情况是两个系统重合。另请注意,这些宏是否实际预定义显然取决于您的特定编译器。

如果所有其他方法都失败了(例如,目标系统与主机不同,或者您的编译器非常奇怪,根本不能预定义任何系统检测宏),只需在编译器的命令行中定义它们中的任何一个(例如,使用将符合POSIX的C编译器中的-D放入构建脚本或makefile中。不要在标题中自己写这样的#define

答案 1 :(得分:0)

您可以在编译期间使用-D_WINDOWS_。对于(3)请注意,标题对排序很敏感。