我目前正在使用Visual Studio 2012,Eclipse,CodeBlocks和MinGW编写C++ 11代码。

问题:

我注意到GCC中的功能(延迟,=与即时,:=,扩展/分配等)以及Microsoft的nmake使我想知道正式的“makefile”标准是什么。

  • 是否使用C++ 11对makefile标准进行了更新?
  • 我知道GNU makefile标准在哪里(http://www.gnu.org/software/make/manual/make.html),但是在哪里可以找到“The” makefile标准?
  • 老实说,我宁愿用C++编写makefile,并从shell作为脚本运行它们;有没有办法将C++代码作为脚本运行?也许是Javascript?还有哪些其他脚本语言可用于执行此操作?

  • 背景:

    困难(咳嗽)是我试图确保代码在每个环境中都能编译,还试图交叉编译到其他目标((使用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脚本。
    有两种方法可以做到这一点:

  • 您想将C++的输出集成到
    makefile本身,GNU make确实是您唯一的解决方案(
    思考),使用$(shell ...)`(直到最近我一直在这里工作,
    “引用”是VS项目文件;我们使用了$(shell ...)
    调用将项目文件解析为的Python脚本
    生成目标文件和依赖项列表
    makefile。)
  • 如果要调用C++程序来生成源
    在以后的编译中,您可以为源创建依赖项
    文件:
        machineGenerated.cpp : somethingElse myPreProcessor
                myPreProcessor somethingElse > machineGenerated.cpp
    
    You 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++进行编译(或i686x86-64)。

    关于c++ - 官方C++/11 Makefile标准/替代品?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16653226/

    10-11 22:44
    查看更多