我想在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”导致错误。
感谢。
答案 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)请注意,标题对排序很敏感。