2012-09-05 17 views
10

Ho provato a giocare con SublimeText2 per qualche tempo. Mentre è molto facile lavorare con Python in esso quasi fuori dalla scatola, lavorare con C++ è un po 'più complicato. Riesco a impostare uno script di build CMake copiando e modificando lo script Makefile esistente, ma ci sono molte cose che semplicemente non funzionano come in un IDE supportato da CMake, come Eclipse CDT. SublimeText 2 non sembra comprendere il concetto di una directory di compilazione separata, inoltre non può ottenere il completamento automatico tramite SublimeClang, se includo le librerie con riferimento alle directory aggiunte in CMake. SublimeClang continua a lamentarsi del fatto che non riesce a trovare le librerie e quando provo a #include, non può nemmeno offrirmi il completamento automatico sui nomi di file di intestazione STL standard, ad es. Algoritmo. Se qualcuno ha una pipeline capito, sarei obbligato a sentirlo.Uso efficiente di SublimeText con SublimeClang per progetti CMake/C++

Ho già fatto questa domanda in forum di utilizzo più generale, dove non ho ricevuto risposta, motivo per cui ho pensato di postarlo qui.

+0

Potrebbe essere più preciso circa gli errori che stanno ottenendo? Che cosa dice esattamente SublimeClang riguardo a quelle librerie? Non capisco cosa intendi per "includere una biblioteca". Non esiste una cosa come includere una libreria nel codice sorgente C++, includendo solo le intestazioni. – Syncopated

risposta

10

Uso Sublime Text 2 con CMake e SublimeClang. Io uso anche SublimeGDB. La mia directory di compilazione è inferiore a [project root]/build. Date un'occhiata al mio file di progetto e vedere se ti aiuta:

{ 
    "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}" 
    } 
} 

Lo script compileflags.rb viene utilizzato per la ricerca di file nella flags.make CMake costruire albero che è dove CMake mantiene i suoi flag di compilazione. Questi flag sono necessari affinché SublimeClang sappia dove trovare i tuoi include.

Ecco lo script che trovi sotto 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

Se hai fatto questo in un pacchetto, molti come me sarebbero eternamente grati. io –