2013-03-15 5 views
0

У меня есть система сборки, сконфигурированный для создания проекта с повышением (v1.53, Mac OS X Mountain Lion)Sublime Text 2 Проблема с усилением

{ 
    "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 ++? Или есть еще одна проблема.

+0

Не могли бы вы попытаться разделить этот аргумент на три: «-I/usr/local/include -L/usr/local/lib -lboost_system»? – longhua

+0

Это исправлено, спасибо! – Mike

+0

Поляна, чтобы помочь вам. – longhua

ответ

2

В сборке Sublime Text 2 каждый аргумент команды должен быть отдельным элементом в массиве cmd. Если вы укажете три аргумента в одном элементе, они будут переданы только как один аргумент. Возьмем, например, следующий параметр: скрипт python получит только один аргумент, значение которого равно "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" будет рассматриваться в качестве одного из аргументов, то есть, g++ не знает, что вы указали два варианта связи.

+0

Для запуска это похоже не работает одинаково. Я попытался разделить аргументы и отделить их – Mike