2012-09-05 7 views
10

Bir süredir SublimeText2 ile oynamaya çalışıyorum. Python ile çalışmak çok kolay olsa da, neredeyse kutunun dışında, C++ ile çalışmak biraz daha zordur. Varolan Makefile komut dosyasını kopyalayıp değiştirerek bir CMake oluşturma betiği oluşturabilirim, ancak Eclipse CDT gibi CMake destekli bir IDE'de olduğu gibi çalışmayan birçok şey var. SublimeText 2, ayrı bir derleme dizini kavramını anlayamıyor gibi görünüyor, ayrıca, CMake içinde eklenen dizinlere referansla kütüphaneleri dahil etmeme rağmen, SublimeClang aracılığıyla otomatik tamamlamamı da alamıyorum. SublimeClang kütüphaneleri bulamadığı için şikayet ediyor ve ben #include'u denediğimde, standart STL başlık dosya adlarında, örneğin algoritmada bana otomatik tamamlama bile sunamaz. Birisinin bir boru hattı varsa, bunu duymak zorunda kalırdım.SublimeText'i CMake/C++ Projeleri için SublimeClang ile Kullanmak

Bu soruyu daha genel amaçlı kullanımla ilgili forumlarda daha önce hiç yanıt alamadığım yerlerden sordum, bu yüzden burada göndermeyi düşündüm.

+0

Eğer alıyorsanız hatalar hakkında daha açık olabilir misin: Burada

scripts/ altında bulunan bu senaryoyu, nedir? Bu kütüphaneler hakkında tam olarak ne demek SublimeClang? "Kitaplığı dahil et" ile ne demek istediğini anlamıyorum. C++ kaynak kodunda, yalnızca başlıklar dahil olmak üzere bir kütüphane gibi bir şey yoktur. – Syncopated

cevap

10

Sublime Text 2'yi CMake ve SublimeClang ile kullanıyorum. Ayrıca SublimeGDB kullanıyorum. Yapım dizinim [project root]/build'un altında. Eğer size yardımcı olur projemin dosyasına bir göz atın ve bakın:

{ 
    "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 komut CKağıt onun derleme bayrakları tutan nerede ağaç oluşturmak CMake içinde flags.make dosyaları aramak için kullanılır. Bu bayraklara ihtiyaç vardır, bu yüzden SublimeClang sizin içeriklerini nerede bulacağını bilir.

#!/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

Eğer bunu bir paket haline getirdiysen, benim gibi birçoğu sonsuza dek minettar olurdu. ben –