问题 有效地将SublimeText与SublimeClang一起用于CMake / C ++项目


我一直试图使用SublimeText2一段时间了。虽然使用Python几乎可以很容易地使用它,但使用C ++会有点棘手。我可以通过复制和修改现有的Makefile脚本来设置CMake构建脚本,但有很多东西不像在CMake支持的IDE中那样工作,比如Eclipse CDT。 SublimeText 2似乎不理解单独的构建目录的概念,如果我包含参考CMake中添加的目录的库,它也无法通过SublimeClang自动完成。 SublimeClang一直在抱怨它无法找到库,当我尝试时 #include,它甚至不能为我提供标准STL头文件名的自动完成,例如算法。如果有人找到了管道,我将不得不听到它。

我之前在更多通用的用法相关论坛中问过这个问题,我没有得到任何回复,这就是我想在这里发帖的原因。


11342
2017-09-05 22:05


起源

你能更具体地了解你得到的错误吗? SublimeClang究竟对这些库有什么看法?我不明白你的意思是“包括一个图书馆”。没有包含C ++源代码库的东西,只包含头文件。 - Syncopated


答案:


我使用Sublime Text 2和CMake以及SublimeClang。我也使用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脚本用于搜索 flags.make CMake构建树中的文件,CMake保存其编译标志。需要这些标志,以便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

10
2017-10-25 23:55



如果你把它变成一个包装,很多像我一样会永远感激。一世 - Alexander Duchene