Windows和*nix编译检测

Ser*_*e C 2 c linux windows makefile embedded-linux

应该为Windows,Linux和嵌入式目标编译一个项目.在主机或嵌入式目标上运行时,应用程序具有行为差异.总结我的要求,这是表:

   Target               Compiler      Behavior
   Windows              MSVC, gcc         A
   Host Linux           gcc               A
   Embedded Linux       cross pltf gcc    B
Run Code Online (Sandbox Code Playgroud)

我希望创建一个自动识别编译器和环境差异的Makefile(无需手动传递参数/定义).是否可以通过在C源文件级别使用条件编译来解决此类问题?
到目前为止我还没有使用automake.

Jud*_*den 6

自动工具被提出来解决这个问题.Makefile本身不能这样做.

至于条件编译,这些编译器定义了几个可用的宏(例如,_MSC_VER对于MSVC++,_WIN32对于Windows和__linux__对于Linux).此外,gcc提供了处理不同CPU目标的断言.

Target         Compiler     Conditional
Windows        MSVC++       #ifdef _MSC_VER
Windows        gcc          #if defined(_WIN32) && defined(__GNUC__)
Linux          gcc          #if defined(__linux__) && defined(__GNUC__)
Platform (x86) gcc          #if #cpu(i386)
Platform (arm) gcc          #if #cpu(arm)
Run Code Online (Sandbox Code Playgroud)

这应该足以满足您的目的.