首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C++11建立TextMate?

用C++11建立TextMate?
EN

Stack Overflow用户
提问于 2014-04-12 18:58:09
回答 2查看 1.5K关注 0票数 2

对于一个常规的C++98程序,要从TextMate运行它,我所需要做的就是用一个⌘R从TextMate运行它。然而,对于C++11,这是不可能的。例如,如果我有以下程序:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
    for (auto i : {1, 2, 3})
        cout << i << " ";

    cout << "\n";
}

然后执行C++11 R会导致以下⌘构建错误:

代码语言:javascript
复制
untitled:6:10: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
    for (auto i : {1, 2, 3})
         ^
untitled:6:17: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
    for (auto i : {1, 2, 3})
                ^
untitled:6:19: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>
    for (auto i : {1, 2, 3})
                  ^
2 warnings and 1 error generated.

这个程序在Xcode中运行良好,或者使用一个简单的make (我的.bashrc中有一个负责make的.bashrc)。我还可以使用clang++ -std=c++11 test.cpp从命令行构建它,所以这不是编译器问题,而是与TextMate配置有关的问题。

查看TextMate运行包,我可以看到它引用了TM_CXX_FLAGS。从TextMate首选项,我将-std=c++0x-Wc++11-extensions附加到TM_CXX_FLAGS。这似乎没什么用。

很明显我忽略了一些显而易见的东西。

关于我怎么解决这个问题有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-12 23:28:56

默认情况下,Preferences→变量中的默认变量被禁用。

因此,您需要通过选中最左边列中的复选框来启用TM_CXX_FLAGS

票数 2
EN

Stack Overflow用户

发布于 2014-04-12 19:46:02

我可以通过在运行包中添加-std=c++11来解决这个问题,这似乎有点迂回。有办法在全球范围内更新TM_CXX_FLAGS吗?(目前,TextMate似乎没有接收到我对TM_CXX_FLAGS设置在TextMate首选项中的更改)

以下是我当前的解决办法:(这是我的运行包。我所做的唯一改变就是添加-std=c++11)

代码语言:javascript
复制
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

require "#{ENV['TM_SUPPORT_PATH']}/lib/tm/executor"
require "#{ENV['TM_SUPPORT_PATH']}/lib/tm/save_current_document"
require "shellwords"

CONFIG = {
  'source.c'      => [ ENV['TM_GCC'] || 'xcrun clang',   "-x c             #{ENV['TM_C_FLAGS']      || '-Wall -include stdio.h'}",                                    'c'  ],
  'source.cc'     => [ ENV['TM_GXX'] || 'xcrun clang++', "-x c++ -std=c++11          #{ENV['TM_CXX_FLAGS']    || '-Wall -include stdio.h -include iostream -Wc++11-extensions'}",                  'cc' ],
  'source.c++'    => [ ENV['TM_GXX'] || 'xcrun clang++', "-x c++ -std=c++11          #{ENV['TM_CXX_FLAGS']    || '-Wall -include stdio.h -include iostream -Wc++11-extensions'}",                  'cc' ],
  'source.objc'   => [ ENV['TM_GCC'] || 'xcrun clang',   "-x objective-c   #{ENV['TM_OBJC_FLAGS']   || '-Wall -include stdio.h -framework Cocoa'}",                   'm'  ],
  'source.objc++' => [ ENV['TM_GXX'] || 'xcrun clang++', "-x objective-c++ #{ENV['TM_OBJCXX_FLAGS'] || '-Wall -include stdio.h -include iostream -framework Cocoa'}", 'mm' ],
}

cc, flags, ext = *CONFIG['source.objc++'] # default
cc, flags, ext = *CONFIG[$&] if ENV["TM_SCOPE"] =~ /\bsource\.(obj)?c(\+\+)?/

TextMate.save_if_untitled(ext)
TextMate::Executor.make_project_master_current_document
args = Shellwords.split(cc) << Shellwords.split(flags) << ENV["TM_FILEPATH"]
TextMate::Executor.run(args, :version_args => ["--version"], :version_regex => /\A([^\n]*) \(GCC\).*/m)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23034784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档