0

ブースト (v1.53、Mac OS X Mountain Lion) でプロジェクトをビルドするように構成されたビルド システムがあります。

{
    "cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}", "-I/usr/local/include -L/usr/local/lib -lboost_system"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.c, source.c++",

    "variants":
    [
        {
            "name": "Run",
            "cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
        }
    ]
}

ただし、単純なプログラムでテストしようとすると、次のようになります。

#include <iostream>
#include <boost/asio.hpp>

int main(){
    std::cout << "Hello world! - boost" << std::endl;
    return 0;
};

次のエラーが表示されます(崇高なテキスト2出力から):

Undefined symbols for architecture x86_64:
  "boost::system::system_category()", referenced from:
      __static_initialization_and_destruction_0(int, int)in cct7f9yj.o
      boost::asio::error::get_system_category()    in cct7f9yj.o
  "boost::system::generic_category()", referenced from:
      __static_initialization_and_destruction_0(int, int)in cct7f9yj.o
ld: symbol(s) not found for architecture x86_64
collect2: [Finished in 1.1s with exit code 1]ld returned 1 exit status

コンソール出力は次のとおりです。

Running g++ /Users/xxxx/Desktop/event_system/main.cpp -o /Users/xxxx/Desktop/event_system/main -I/usr/local/include -L/usr/local/lib -lboost_system

同じコマンドをコピーして端末に貼り付けると、問題なく動作します。これは、Sublime Text 2 が g++ を正しく使用できないという問題だけですか? それとも何か他の問題がありますか。

4

1 に答える 1

2

Sublime Text 2 ビルド システムでは、コマンドの各引数は array 内の個別の項目である必要がありますcmd。1 つの項目に 3 つの引数を指定すると、それらは 1 つの引数として渡されます。たとえば、次の設定を使用すると、python スクリプトは、値が である 1 つの引数のみを受け取ります"arg1 arg2 arg3"

{
    "cmd"       : ["python", "${file_path}/${file_base_name}.py", "arg1 arg2 arg3"],
    "selector"  : "source.py",
    "working_dir": "${file_path}"
}

したがって、ビルド システムで"-I/usr/local/include -L/usr/local/lib -lboost_system"は、 は 1 つの引数として扱われます。つまり、g++2 つのリンク オプションを指定したことを認識しません。

于 2013-03-17T11:49:06.633 に答える