11

私はSublimeText2でしばらく遊んでみました。ほとんど箱から出してすぐに Python を使用するのは非常に簡単ですが、C++ を使用するのは少しトリッキーです。既存の Makefile スクリプトをコピーして変更することで、CMake ビルド スクリプトをセットアップすることはできますが、Eclipse CDT などの CMake がサポートする IDE ではうまくいかないことがたくさんあります。SublimeText 2 は別のビルド ディレクトリの概念を理解していないようです。また、CMake で追加されたディレクトリを参照してライブラリを含めると、SublimeClang を介してオートコンプリートを取得できません。SublimeClang は、ライブラリが見つからないという不平を言い続けています。#include、アルゴリズムなどの標準のSTLヘッダーファイル名でオートコンプリートを提供することさえできません。誰かがパイプラインを考え出した場合、私はそれについて聞く義務があります.

以前、より一般的な使用法関連のフォーラムでこの質問をしたことがありますが、回答が得られなかったため、ここに投稿することにしました。

4

1 に答える 1

10

CMake と SublimeClang で Sublime Text 2 を使用しています。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}"
    }
}

このスクリプトは、CMake がコンパイル フラグを保持する場所である CMake ビルド ツリー内のファイルcompileflags.rbを検索するために使用されます。flags.makeこれらのフラグは、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
于 2012-10-25T23:55:15.287 に答える