将C / C ++ #defines传递给makefile

时间:2010-01-11 02:44:54

标签: makefile eclipse-cdt

我使用Eclipse IDE开发C / C ++。 Eclipse还会生成一个我不想编辑的makefile,因为它只会被覆盖。

我想在Hudson中使用该makefile进行夜间构建。

如何将在IDE的项目文件中生成的#defines传递给makefile? (为什么Eclipse没有将它们包含在生成的makefile中?)

我实际上曾经想过这一次,然后不小心覆盖了它:-(但至少我知道它可以做到......

4 个答案:

答案 0 :(得分:29)

如果从命令行运行make,请使用

make CPPFLAGS=-DFOO

将为所有编辑添加-DFOO。另请参阅制作手册中的CFLAGS,CXXFLAGS,LDFLAGS。

答案 1 :(得分:2)

你可以编写一个小程序来包含头文件并编写一个你include in the main makefile(需要GNU make)的makefile片段。

这是一个相当丑陋的解决方案,需要相当多的手工hackery。更优雅的是解析项目文件并编写makefile片段。

答案 2 :(得分:1)

对于GCC使用-D define。

OP在下面评论说他希望将define传递给make并让它传递给GCC。

Make不允许这样做。通常,您只需添加另一个make规则来添加定义。例如'make release'vs'make debug'。作为makefile创建者,您可以创建两个规则并在make文件中使用define。现在,如果Eclipse没有将定义文件放入makefile中,我会说Eclipse已经坏了。

答案 3 :(得分:1)

如果你正在使用autotools,另一个选择是有2个目录'bin / debug'和'bin / release'。

# 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)并将Build Location-> Build Directory设置为

${workspace_loc:/helloworld/bin/debug}

将'helloworld'替换为项目相对于工作空间的目录(或者您可以提供绝对路径$ {/ abs / path / debug})。使用Release配置执行相同的操作,将“/ debug”替换为路径末尾的“release”。

这种方法似乎浪费了磁盘空间,但却是实现完全独立构建的有效替代方法。