对于一个常规的C++98程序,要从TextMate运行它,我所需要做的就是用一个⌘R从TextMate运行它。然而,对于C++11,这是不可能的。例如,如果我有以下程序:
#include <iostream>
using namespace std;
int main()
{
for (auto i : {1, 2, 3})
cout << i << " ";
cout << "\n";
}然后执行C++11 R会导致以下⌘构建错误:
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。这似乎没什么用。
很明显我忽略了一些显而易见的东西。
关于我怎么解决这个问题有什么建议吗?
发布于 2014-04-12 23:28:56
默认情况下,Preferences→变量中的默认变量被禁用。
因此,您需要通过选中最左边列中的复选框来启用TM_CXX_FLAGS。
发布于 2014-04-12 19:46:02
我可以通过在运行包中添加-std=c++11来解决这个问题,这似乎有点迂回。有办法在全球范围内更新TM_CXX_FLAGS吗?(目前,TextMate似乎没有接收到我对TM_CXX_FLAGS设置在TextMate首选项中的更改)
以下是我当前的解决办法:(这是我的运行包。我所做的唯一改变就是添加-std=c++11)
#!/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)https://stackoverflow.com/questions/23034784
复制相似问题