Существует способ использовать buildconfiguration s для создания одного двоичного файла (или разделяемой библиотеки, в моем случае) из каждой конфигурации сборки. Используя ответ выше, это означает, что нужно вручную исключить все, кроме эффективного основного файла, из каждой конфигурации сборки.
Я просто использовал приведенные выше ответы, чтобы упростить работу над моим проектом eclipse , который создает 14 общих библиотек через 14 конфигураций сборки. Однако настройка отдельного параметра «исключить из сборки» была довольно громоздкой, поэтому я перешел к использованию следующего кода, опирающегося на директиву препроцессора , в качестве моего основного файла:
/*
*main.cpp
*/
/* Within
* Project | Properties | C/C++-Build | Settings
* | GCC C++ Compiler | Preprocessor
* set the following defined Symbol:
* _FILENAME=${ConfigName}
*/
#define __QUOT2__(x) #x
#define __QUOT1__(x) __QUOT2__(x)
#include __QUOT1__(_FILENAME.cpp)
#undef __QUOT1__
#undef __QUOT2__
/* The above include directive will include the file ${CfgName}.cpp,
* wherein ${CfgName} is the name of the build configuration currently
* active in the project.
*
* When right clicking in
* Project Tree | (Project)
* and selecting
* Build Configuration | Build all
* this file will include the corresponding .cpp file named after the
* build config and thereby effectively take that file as a main file.
*
* Remember to exclude ALL ${CfgName}.cpp files from ALL build configurations.
*/
Обратите внимание, что он больше ничего не делает, кроме того, включает еще один файл .cpp, имя которого выводится из препроцессора и символ, который устанавливается в параметрах компилятора. Символом является $ {CfgName}, и он будет автоматически заменен текущим именем конфигурации на eclipse.
Не нужно настраивать, какой файл включен в конфигурацию сборки. Просто исключите все файлы $ {CfgName} .cpp в каждой сборке и включите main.cpp в каждую сборку.
PS: ответ от hovercraft дал мне идею иметь основной файл, который не содержит сам по себе код. Если кто-то включает общий код из разных эффективных основных файлов $ {CfgName} .cpp, работа над их кодом может оказаться невозможной, поскольку заголовочные файлы в main.cpp не будут видны в них.
Я делал это до вчерашнего дня, но поддержание кода с неработающим индексом и т. Д. Было большой болью.
PPS: эта процедура в настоящее время нарушает автоматическое восстановление основного файла, если был изменен только включенный файл .cpp. Кажется, что eclipse не распознает изменения в $ {CfgName} .cpp (который исключен из сборки). Таким образом, ручная перестройка требуется после каждого изменения. Это в настоящее время меня беспокоит;)