我有一个程序,它包含eclipse中的多个项目(在ubuntu下工作,项目在c ++中),这些项目包括一个主可执行文件,以及其他共享对象文件和静态库。
我希望构建所有这些项目时将其文件输出到一个公共二进制文件夹,而不是它们各自的调试文件夹。这是为了使主要可执行文件更容易链接。如果有更好的解决方案,请随时分享。
答案 0 :(得分:13)
不幸的是,我发现 C / C ++ Build 标签不允许您设置构建位置,除非您要创建自己的makefile。
您可能会发现项目属性> C / C ++ Build 下的构建器设置标签在默认的C / C ++项目中都显示为灰色。这是因为CDT默认为新项目指定内部构建器。要更改此设置,您可以转到项目属性> C / C ++构建>工具链编辑器,并将当前构建器更改为 Gnu Make Builder 。接下来,转到项目属性> C / C ++ Build ,并将构建器类型更改为外部构建器。如果您愿意,您现在可以选择为项目创建自己的makefile;虽然我建议现在让CDT自动构建makefile。
我对输出到/ project_path / bin有相同的项目要求(尽管我仍然保持Debug和Release版本之间的分离)。为此,我在输出上执行复制操作作为构建后步骤。
要执行此操作,请转到项目属性> C / C ++构建>设置,然后选择构建步骤标签。在命令下的制作后步骤中输入:
cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "/path/to/bin/directory/";
显然,根据需要更换“/ path / to / bin / directory /”。
我个人更喜欢将项目文件保存在 workspace / build 目录中;将二进制文件复制到 workspace / bin 目录,将库复制到 workspace / lib 目录。起初我发现这个副本的解决方法很不方便,但已经开始欣赏它,因为它将插页式构建文件与最终的二进制文件/库隔离开来。
对于二进制文件,我会使用:
cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "${WorkspaceDirPath}/bin/";
对于图书馆,我会使用:
cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "${WorkspaceDirPath}/lib/";
我包含变量“$ {BuildArtifactFilePrefix}”,因为CDT包含“lib”作为静态库的默认前缀,我实际上更喜欢它。
您只需要在构建之前确保目标目录存在; Eclipse / CDT不会为您创建目录。
另外,请记住,这些副本将在clean上留在 / bin 或 / lib 目录中,但在任何后续重建时都会被覆盖。
答案 1 :(得分:5)
尝试Project->Properties
在C/C++ Build->Settings
下,您有一个名为Build Artifact
的标签。
在那里你有Artifact name
。默认为${ProjName}
。
修改此选项以指定实际希望最终文件结束的相对目录路径。所以可能是../../lib/${ProjName}
中间文件(.o和.d)仍然会构建到子目录(Debug或Release)但是我觉得如果它们在那里它们会更好并且它只是你想要的最终构建的库改变构建路径。
如果您发现输入这样的相对路径不方便,我使用Environment创建环境变量,并使用相对路径将我带回“root”。其中一个是${LIBDIR}
,这是项目构建的相对路径。它通常用于链接到其他库中,但也可以用作目标。然后,您可以将工件名称设置为${LIBDIR}/${ProjName}
,如果您使用不同的目录进行调试和发布构建,则该工作正常。
答案 2 :(得分:3)
转到
命令行模式显示在右侧
${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT} ${INPUTS}
放在${OUTPUT}
${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${ProjDirPath}/bin/${OUTPUT} ${INPUTS}
或
${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} MyMainProject/path/bin/ ${INPUTS}
来自https://www.eclipse.org/forums/index.php?t=msg&th=207500&goto=665566&#msg_665566
答案 3 :(得分:1)
在我的项目中,构建路径默认为Build Configuration名称,因此我可以使用$ {ConfigName}宏在构建后的步骤中检索构建路径:
${workspace_loc:/${ProjName}}/${ConfigName}/${BuildArtifactFileName}
然后,您可以将目标二进制文件复制到公共二进制文件夹,或者在该特定配置的build文件夹中执行其他操作。
答案 4 :(得分:0)
如果打开项目的属性,则有一个选项卡C / C ++ Build。这有一个构建位置选项,您可以在其中指定构建目录。您似乎可以为多个项目更改此项,以便它们共享相同的构建目录。
答案 5 :(得分:0)
恰好正在做一些让我走上类似道路的事情 - 所以我会把它作为替代解决方案/提醒给我自己:
在Eclipse中(至少在Luna中)生成的makefile实际上相当不错且方便。我个人喜欢创建几个构建配置(具有32位和64位架构的发布和调试版本),并使用调试和运行(分别为F5和Execute)配置进行补充。
继续:我一直在玩Debian上的包装,发现 - 在玩弄的过程中 - 我需要创建并测试安装目标。 Eclipse既不为您生成,也不提供用于自定义或添加安装目标的配置接口;除了可以指定另一个目标存在的地方之外。
从技术上讲,Eclipse确实提供了一个接口;有点儿。因此,我偶然发现了 makefile.init , makefile.defs 和 makefile.targets 文件。
过程/工作流:
在eclipse项目的根目录中创建一个文件makefile.targets
;在所述文件中手动定义安装目标。 这当然 - 允许您按照自己的喜好指定每个细节,但Eclipse提供的所有配置的附加好处已经完成并可供您定义规则指定目标。
在makefile.targets
文件中定义新目标后,右键单击项目的名称或Eclipse中的主要cpp文件{{1然后选择project explorer
- > Make Targets
,最后选择Build...
来实例化弹出窗口。 或者,您可以选择“创建”'在最后一步而不是' build'并且它将提供下一部分所需的相同弹出窗口。添加新目标的名称,并将其他所有内容保留为默认值 - 单击Add
< / p>
如果您选择通过右键单击项目浏览器中的并选择制作目标 - >来添加新的制作目标。 构建... ,在添加新的make目标后,您将返回到第一个弹出窗口,该弹出窗口是选择 Build ... 。否则,请立即找到ok
- &gt; Make Targets
弹出窗口。选择所需目标,然后单击Build..
。
查看Eclipse自动生成的makefile是学习makefile语法和整体结构的一种很好的方法,并进入包含和条件的一些高级用法。
以下是一个示例makefile的一些部分,至少我希望它将演示手动设置构建的输出目录:
Build