如何让Eclipse在一个项目中一次构建多个二进制文件(无需手动编写Makefile)?
我有一个CGI项目,导致Web服务器运行多个.cgi程序,以及它们使用的几个库。用于构建它的手工制作的Makefile慢慢变得不可维护。我们使用Eclipse的“内部构建”来构建所有其他项目,我们也更喜欢在这里使用它,但是为了我的利益,我找不到如何让Eclipse构建多个小程序而不是链接一切分成一个二进制文件。
答案 0 :(得分:28)
此处描述的解决方案:http://tinyguides.blogspot.ru/2013/04/multiple-binaries-in-single-eclipse-cdt.html。 有一段摘录:
答案 1 :(得分:4)
使用Eclipse作为生产代码的构建系统似乎是个坏主意。我认为它是一个很棒的IDE,并且已经广泛用于Java和C ++项目,但对于构建系统,我坚信Ant,make和其他专用构建实用程序是可行的。
有几个原因:
专用的构建实用程序为您生成多个可执行目标提供了极大的灵活性。
Ant并支持最可想象的任意构建流程链(尽管不是全部)。
与Eclipse之类的IDE工具相比,专用构建实用程序可能为构建描述文件格式提供更高的稳定性和向后兼容性。另外,我很确定Eclipse的内部构建功能依赖于“.project”文件描述,而后者的格式可能不如Ant或make的构建描述格式稳定。
通用的基本构建实用程序通常基于命令行,这使得它们可以轻松地与更复杂,更高级别的构建实用程序集成,以实现Pulse,CruiseControl等自动构建管理。
激发你的问题的需要是告诉你是时候切换到更好的构建工具了。
答案 2 :(得分:2)
有一种方法可以使用buildconfiguration来从每个构建配置创建一个二进制文件(或者我的情况下是共享库)。使用上面的答案,这意味着从每个构建配置中手动排除除有效主文件之外的所有文件。
我刚刚使用上面的答案来简化我的eclipse项目,该项目通过14个构建配置创建了14个共享库。但是,配置indivdual"排除构建"设置非常繁琐,所以我转而使用以下代码依赖preprocessor-directive作为我的完整主文件:
/*
*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文件,该文件的名称是从preprocessor推导出来的,并且是在编译器选项中设置的符号。符号为$ {CfgName},将由eclipse自动替换为当前配置名称。
一个不需要配置,哪个文件包含在哪个构建配置中。只需排除每个构建中的所有$ {CfgName} .cpp文件,并在每个构建中包含main.cpp。
PS:来自气垫船的答案让我想到了一个不包含代码的主文件。如果一个包含来自不同有效主文件$ {CfgName} .cpp的共享代码,那么处理它们的代码可能会变得不可行,因为main.cpp中的头文件在它们中是不可见的。 直到昨天我才这样做,但是使用破损索引等维护代码是一件很大的痛苦。PPS:如果只更改了包含的.cpp文件,则此过程当前会中断主文件的自动重建。似乎eclipse无法识别$ {CfgName} .cpp(从构建中排除)中的更改。因此,每次更改后都需要手动重建。这是目前困扰我的;)