我一直在试图用SublimeText2玩一段时间.虽然在
Python中很容易使用
Python,但是使用C更加棘手.我可以通过复制和修改现有的Makefile脚本来设置一个CMake构建脚本,但是有许多事情在CMake支持的IDE(如Eclipse CDT)中不起作用. SublimeText 2似乎不了解一个单独的构建目录的概念,它也不能让我通过SublimeClang自动完成,如果我包括参考在CMake中添加的目录的库. SublimeClang不断抱怨说找不到库,当我尝试#include时,甚至不能在标准的STL头文件名(例如算法)上给我自动完成.如果有人想出了一条管道,我将不得不听到.
我以前在更通用的使用相关论坛中提出了这个问题,在那里我没有得到任何回应,这就是为什么我想把它发布在这里.
解决方法
我使用Sublime Text 2与CMake和SublimeClang.我也使用SublimeGDB.我的构建目录在[项目根目录] / 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.rbscript用于在CMake构建树中搜索flags.make文件,CMake保留其编译标志.这些标志是必需的,所以SublimeClang知道在哪里找到你的包括.
这是脚本,位于脚本/:
#!/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