2012-09-05 8 views
10

私はしばらくの間SublimeText2で試してみました。ほとんどの場合Pythonを使って作業するのは非常に簡単ですが、C++で作業するのはちょっと難しいことです。私は既存のMakefileスクリプトをコピーして変更することによってCMakeビルドスクリプトを設定することができますが、Eclipse CDTのようにCMakeがサポートしているIDEと同じように機能しないものがたくさんあります。 SublimeText 2は別のビルドディレクトリのコンセプトを理解していないようですが、CMakeで追加されたディレクトリを参照してライブラリをインクルードすると、SublimeClangを使ってオートコンプリートすることもできません。 SublimeClangはライブラリを見つけることができないと不満を持ち続け、#includeにしようとすると、アルゴリズムなどの標準的なSTLヘッダーファイル名でオートコンプリートを提供することもできません。誰かがパイプラインを見つけたら、私はそれについて聞く義務があります。CMake/C++プロジェクト用にSublimeClangを使ったSublimeTextの効率的な使用

私はこれまでより汎用的な使用関連のフォーラムでこの質問をしましたが、回答が得られなかったので、ここで投稿することを考えました。

+0

あなたが取得しているエラーに関するより具体的なのだろうか? SublimeClangはこれらのライブラリについて何を言っていますか?私はあなたが "図書館を含める"という意味を理解していません。 C++のソースコードにはライブラリを含め、ヘッダーだけを含むものはありません。 – Syncopated

答えて

10

私はCMakeとSublimeClangで崇高なテキスト2を使用します。私はまた、SublimeGDBを使用します。ビルドディレクトリは[project root]/buildです。それはあなたを助けている場合、私のプロジェクトファイルを見ていると、参照してください。

{ 
    "folders": 
    [ 
     { 
      "path": "." 
     } 
    ], 

    "build_systems": 
    [ 
     { 
      "name": "Build", 
      "cmd": [ "make", "-C", "build" ], 
      "file_regex": "/([^/:]+):(\\d+):(\\d+): " 
     } 
    ], 

    "settings": 
    { 
     "sublimegdb_commandline": "gdb --interpreter=mi myapp", 
     "sublimegdb_workingdir": "build", 

     "sublimeclang_options" : 
     [ 
      "-Wno-reorder" 
     ], 
     "sublimeclang_options_script": "${project_path:scripts/compileflags.rb} ${project_path:build}" 
    } 
} 

compileflags.rbスクリプトはcmakeのは、そのコンパイルフラグを保存する場所でツリーを構築CMakeのでflags.makeファイルを検索するために使用されます。これらのフラグは、SublimeClangがあなたのインクルードを見つける場所を知るために必要です。ここで

scripts/の下に位置し、そのスクリプトです:

#!/usr/bin/env ruby 

# Searches for a flags.make in a CMake build tree and prints the compile flags. 

def search_dir(dir, &block) 
    Dir.foreach(dir) do |filename| 
     next if (filename == ".") || (filename == "..") 
     path ="#{dir}/#{filename}" 
     if File.directory?(path) 
      search_dir(path, &block) 
     else 
      search_file(path, &block) 
     end 
    end 
end 

def search_file(filename) 
    return if File.basename(filename) != "flags.make" 

    File.open(filename) do |io| 
     io.read.scan(/[a-zA-Z]+_(?:FLAGS|DEFINES)\s*=\s*(.*)$/) do |match| 
      yield(match.first.split(/\s+/)) 
     end 
    end 
end 

root = ARGV.empty? ? Dir.pwd : ARGV[0] 
params = to_enum(:search_dir, root).reduce { |a, b| a | b } 
puts params 
+0

これをパッケージにしていれば、私のような多くの人が永遠に感謝しています。私 –

関連する問題