2012-09-05 22 views
10

He estado tratando de jugar con SublimeText2 desde hace un tiempo. Si bien es muy fácil trabajar con Python casi al instante, trabajar con C++ es un poco más complicado. Puedo configurar un script de construcción CMake copiando y modificando el script Makefile existente, pero hay muchas cosas que simplemente no funcionan como lo hacen en un IDE compatible con CMake, como Eclipse CDT. SublimeText 2 no parece entender el concepto de un directorio de compilación separado, tampoco me puede hacer autocompletar a través de SublimeClang, si incluyo las bibliotecas con referencia a los directorios agregados en CMake. SublimeClang sigue quejándose de que no puede encontrar las bibliotecas, y cuando trato de #include, ni siquiera puede ofrecerme autocompletar en nombres de archivo de cabecera STL estándar, por ejemplo, algoritmo. Si alguien tiene un oleoducto descubierto, me veré obligado a escucharlo.Usar eficientemente SublimeText con SublimeClang para proyectos de CMake/C++

He hecho esta pregunta en foros más generales relacionados con el uso antes, donde no recibí ninguna respuesta, por lo que pensé en publicarla aquí.

+0

Podría ser más específico acerca de los errores que está recibiendo? ¿Qué dice exactamente SublimeClang sobre esas bibliotecas? No entiendo lo que quiere decir con "incluir una biblioteca". No existe tal cosa como incluir una biblioteca en el código fuente de C++, solo incluye encabezados. – Syncopated

Respuesta

10

Uso Sublime Text 2 con CMake y SublimeClang. También uso SublimeGDB. Mi directorio de compilación está bajo [project root]/build. Echar un vistazo a mi archivo de proyecto y ver si le ayuda a:

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

El guión compileflags.rb se utiliza para buscar archivos en el flags.make CMake construir el árbol que es donde CMake mantiene sus banderas de compilación. Estos indicadores son necesarios para que SublimeClang sepa dónde encontrar sus includes.

aquí es que la escritura ubicado debajo 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

Si hicieras esto en un paquete, muchos como yo estaríamos eternamente agradecidos. yo –

Cuestiones relacionadas