我使用Eclipse IDE开发C/C++,它会生成一个makefile,但我不想编辑它,因为它会被覆盖。
我想在Hudson中使用这个makefile来进行夜间构建。
如何将IDE项目文件中定义的#define传递给makefile?(为什么Eclipse没有在生成的makefile中包含它们?)
我曾经想到过解决方法,但不小心把它覆盖了:-(,但至少我知道它是可行的...
我使用Eclipse IDE开发C/C++,它会生成一个makefile,但我不想编辑它,因为它会被覆盖。
我想在Hudson中使用这个makefile来进行夜间构建。
如何将IDE项目文件中定义的#define传递给makefile?(为什么Eclipse没有在生成的makefile中包含它们?)
我曾经想到过解决方法,但不小心把它覆盖了:-(,但至少我知道它是可行的...
如果您是在命令行中运行make,请使用以下命令
make CPPFLAGS=-DFOO
这将在所有编译中添加-DFOO。请参阅 make 手册中的CFLAGS、CXXFLAGS、LDFLAGS。
你可以编写一个小程序来包含头文件并编写一个 include
到主 makefile
中的片段 (需要使用 GNU make)。
这是一个相当丑陋的解决方案,需要大量手动处理。更优雅的方式是解析项目文件并编写 makefile 片段。
# Simple bootstrap script.
# Remove previously generated filed and call autoreconf.
# At the end configure 2 separate builds.
echo "Setting up Debug configuration: bin/debug"
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1"
echo "Setting up Release configuration: bin/release"
cd bin/release/
../../configure CXXFLAGS="-O2"
安装Eclipse。打开项目属性(Project->Properties->C/C++ Build->Builder Settings)并设置构建位置->构建目录为
${workspace_loc:/helloworld/bin/debug}
将“helloworld”替换为相对于工作区的项目目录(或者您可以提供绝对路径${/abs/path/debug})。在Release配置中执行相同的操作,将路径末尾的“/debug”替换为“release”。
这种方法似乎浪费磁盘空间,但是它是实现完全分离构建的有效替代方案。
对于GCC,请使用 -D 定义。
如下所述,OP 希望将定义传递给 make 并让其将其传递给 GCC。
Make 不允许这样做。通常,您只需添加另一个 make 规则来添加定义。例如,“make release”与“make debug”。作为 makefile 创建者,您可以制定两个规则,并在 make 文件中直接添加定义。如果 Eclipse 没有为您将定义放入 makefile 中,我会说 Eclipse 出了问题。
#define
的c++头文件,并希望在make中使用它们来做出决策。如果他在make中有一些变量并希望在c++编译期间让预处理器考虑它们,那么您的建议是正确的。 - dmckee --- ex-moderator kittenmake -DmaxVal=42
。 - Mawg says reinstate Monica-include ../makefile.init' 和
-include ../makefile.defs`
但这些文件不存在(!)。升级从Jaunty到Karmic后,Eclipse CDT的人似乎失误了。有大量网页提供不同的解决方案来安装CDT。也许我选择的“几乎可以工作”。也就是说,在CDT内部工作,但在外部使用make
时无法工作? - Mawg says reinstate Monica
CPPFLAGS += -DBAR
来添加更多标志。 - Scott Wales