2012-09-05 28 views
10

Tôi đã cố gắng để chơi với SublimeText2 một thời gian bây giờ. Trong khi nó rất dễ làm việc với Python trong nó gần như ra khỏi hộp, làm việc với C++ thì phức tạp hơn một chút. Tôi có thể quản lý để thiết lập một CMake xây dựng kịch bản bằng cách sao chép và sửa đổi kịch bản Makefile hiện có, nhưng có rất nhiều điều mà chỉ cần không làm việc như họ làm trong một CMake IDE hỗ trợ, như Eclipse CDT. SublimeText 2 dường như không hiểu khái niệm về một thư mục xây dựng riêng biệt, nó cũng không thể làm cho tôi autocomplete qua SublimeClang, nếu tôi bao gồm các thư viện với tham chiếu đến các thư mục được thêm vào trong CMake. SublimeClang tiếp tục phàn nàn rằng nó không thể tìm thấy các thư viện, và khi tôi cố gắng #include, nó thậm chí không thể cung cấp cho tôi tự động hoàn thành vào tên tập tin tiêu chuẩn tiêu đề STL, ví dụ, thuật toán. Nếu ai đó có một đường dẫn tìm ra, tôi có nghĩa vụ phải nghe về nó.hiệu quả Sử dụng SublimeText với SublimeClang cho CMake/C++ Dự án

Tôi đã hỏi câu hỏi này trong mục đích tổng quát hơn các diễn đàn sử dụng liên quan đến trước đây, nơi tôi đã không nhận được bất kỳ phản ứng, đó là lý do tại sao tôi nghĩ đến đăng nó ở đây.

+0

Ông có thể cụ thể hơn về các lỗi bạn đang nhận được? SublimeClang chính xác nói gì về những thư viện đó? Tôi không hiểu ý bạn là "bao gồm thư viện". Không có thứ như bao gồm một thư viện trong mã nguồn C++, chỉ bao gồm các tiêu đề. – Syncopated

Trả lời

10

tôi sử dụng Sublime Văn bản 2 với CMake và SublimeClang. Tôi cũng sử dụng SublimeGDB. Thư mục xây dựng của tôi dưới [project root]/build. Hãy nhìn vào tập tin dự án của tôi và xem nếu nó giúp bạn:

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

Kịch bản compileflags.rb được sử dụng để tìm kiếm flags.make file trong CMake xây dựng cây đó là nơi CMake giữ cờ biên dịch của nó. Những lá cờ này là cần thiết để SublimeClang biết nơi để tìm thấy bao gồm của bạn.

Dưới đây là kịch bản, nằm dưới 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

Nếu bạn thực hiện điều này thành một gói, nhiều người như tôi sẽ mãi mãi biết ơn. tôi –

Các vấn đề liên quan