我目前正在使用Visual Studio 2012,Eclipse,CodeBlocks和MinGW编写C++ 11代码。
问题:
我注意到GCC中的功能(延迟,=与即时,:=,扩展/分配等)以及Microsoft的nmake使我想知道正式的“makefile”标准是什么。
背景:
困难(咳嗽)是我试图确保代码在每个环境中都能编译,还试图交叉编译到其他目标((使用OpenGL API的Linux / Ubuntu,Windows 7,8,使用DirectX,Android NDK)。
我的核心问题之一是,我使用的许多工具集并没有真正“开放”以支持跨平台性能。
Visual Studio 2012:
没有* nix可运行的编译器。
使用2012年11月C++ CTP编译器的错误版本获得C++ 11支持。
GCC 4.7.x / 4.8x:
仅限于MinGW32和MinGW64的粗糙版本。
CMake的:
正确配置非常困难,但似乎会创建特定于GNU,Microsoft等的makefile。是否有某种方法可以配置它以生成“标准” makefile?
自动制作/自动配置:
似乎仅生成GNU兼容的makefile
最佳答案
Makefile的唯一标准是Posix
(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html)。
然后是Visual Studios,而MinGW make是
实际上是GNU make,可以选择与Posix兼容,
但具有大量扩展名。 (我不确定
Eclipse和CodeBlocks,但它们可能也使用GNU make。)
您使用的makefile在很大程度上与编译器无关。
Posix标准品牌是最低品牌;我会推荐
在任何地方都使用GNU make,主要是因为它是可移植的,并且
就功能而言,它是最强大的。在另一
手,这并不容易学习(而且我所知道的所有产品都不是
特别可读)。不过,我使用了相同的GNU makefile
在Solaris(带有Sun CC和g++),Linux(带有g++)和
Windows(带有MSVC和g++)。
关于从makefile运行C++,我也这样做
所有时间,以及运行Python和Shell脚本。
有两种方法可以做到这一点:
makefile本身,GNU make确实是您唯一的解决方案(
思考),使用$(shell ...)`(直到最近我一直在这里工作,
“引用”是VS项目文件;我们使用了$(shell ...)
调用将项目文件解析为的Python脚本
生成目标文件和依赖项列表
makefile。)
在以后的编译中,您可以为源创建依赖项
文件:
machineGenerated.cpp : somethingElse myPreProcessor myPreProcessor somethingElse > machineGenerated.cppYou can also have rules to build `myPreProcessor` in themakefile.
One thing I've found useful when supporting multiple platforms:
dependsPath := $(strip $(arch))-$(strip $(syst))-$(strip $(comp))
configPath := conf/$(dependsPath)
include $(makefilesDir)/$(configPath)/system.mk
通常,我将为默认的arch,syst和
comp(编译器),但我可以在命令行中覆盖它们,
因此可以在同一台机器上同时使用g++和VC++进行编译(或
i686
和x86-64
)。关于c++ - 官方C++/11 Makefile标准/替代品?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16653226/