Настройки проекта Eclipse Indigo C++

Я создал проект общей библиотеки C++ в Ubuntu с компилятором g++ 4.6.
Некоторые из зависимых библиотек ожидают правильной компиляции некоторых команд препроцессора о компиляторе и операционной системе, например

#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__)

Однако Eclipse не определяет их автоматически (по крайней мере, версия, которую я использую), есть ли в Eclipse параметр или параметр, который делает это для меня?


person Cihan    schedule 28.01.2012    source источник


Ответы (1)


Вы можете установить препроцессор в свойствах проекта: project properties.

Однако в вашем случае я бы не стал их использовать, поскольку они не должны быть специфичными для проекта (из-за того, что они специфичны для компилятора). Я действительно думаю, что вы ищете их. Я не уверен для llvm/clang (они есть, но я их сейчас не помню), но для GCC вы должны использовать макрос __GNUC__, который будет определен самим компилятором, и вам не нужно об этом беспокоиться. . Ведущие символы подчеркивания говорят вам, что они не являются частью стандарта и не обязательно определяются при использовании другого компилятора (например, MSVC).


Для кросс-платформенного использования vsprintf_s:

// this will be set on Visual Studio only, so this code is added for all other compilers
#ifndef _MSC_VER
#define vsprintf_s(b,l,f,v) vsprintf(b,f,v);
#endif

Но в целом старайтесь использовать функции, доступные на всех платформах (в данном случае вместо этого используйте vsnprintf()).

person Mario    schedule 28.01.2012
comment
мой проект пытается использовать vsprintf_s эту функцию, которая является реализацией Microsoft, однако eclipse не добавляет никаких команд препроцессора автоматически, и я не хочу добавлять их вручную. в результате я получаю эту ошибку компилятора: glm/core/.././gtx/string_cast.inl:26:30: ошибка: 'vsprintf_s' не был объявлен в этой области Просто потому, что я не настроил библиотека зависимостей правильно. Вот ссылка на мой установочный файл glm.g-truc.net/ API-0.9.0/a00076_source.html - person Cihan; 28.01.2012
comment
Я также хотел добавить это: /* echo | g++ -E -dM -x c++ - | sort */ когда вы записываете эту команду в консоль, она показывает команды препроцессора, автоматически определяемые компилятором, как сказал Марио. Я считаю, что мой источник ошибки - это нечто иное, чем команды препроцессора. - person Cihan; 28.01.2012
comment
Стандартные функции с постфиксом _s являются дополнениями только для MSVC, чтобы защитить их от переполнения буфера. Просто добавьте несколько простых определений совместимости в заголовочный файл (я добавлю короткий пример выше). - person Mario; 28.01.2012