重用makefile规则

时间:2010-01-02 02:21:11

标签: makefile nmake

我正在学习makefile,我正在试图弄清楚如何重用规则。现在我有以下内容:

CPP = cl

CPPFLAGS = /Od /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

.SUFFIXES: .exe .cpp

Exercise35.exe:
    $(CPP) Exercise35.cpp $(CPPFLAGS)

debug:
    $(CPP) Exercise35.cpp $(CPPFLAGS) /D "_DEBUG"

debug规则基本上使用额外的命令行参数重复Exercise35规则似乎很糟糕。还有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

递归make,并将调试标记附加到CPPFLAGS

debug:
    $(MAKE) CPPFLAGS="$(CPPFLAGS) /D _DBEBUG" Exercise35.exe

答案 1 :(得分:1)

您应该查看制作的以下属性,并查看以下示例:

  • $ @ - 表示当前目标文件的名称,在这种情况下,它对应于APP的值。
  • $< - 表示比目标所依赖的目标更新的单个文件。
  • $? - 表示比目标所依赖的当前目标更新的文件列表。
.SUFFIXES: .cpp.exe
CPP = cl
EXTRAFLAGS = 
CPPFLAGS = /Od /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /ZI /TP /errorReport:prompt

FILES = Exercise35
APP = Exercise35.exe

.cpp.exe:
     $(CPP) $(EXTRAFLAGS) $(CPPFLAGS) /c $<

all : $(APP)

$(APP) : $(FILES)
     $(CPP) $(EXTRAFLAGS) $(CPPFLAGS) $@ $(FILES)

clobber : clean mrproper

clean:
     del $(FILES)

mrproper:
     del $(APP)

我从旧的makefile模板中得到了这个,请注意make将显示为“智能”且灵活,因为你可以通过执行这样的方式覆盖一个make文件中专门用于调试/释放的标志

make EXTRAFLAGS="/D _DDEBUG"

这会将额外的define传递给makefile以包含_DDEBUG宏,如果你想构建一个版本,请在命令行中省略EXTRAFLAGS。

修改 根据迈克的观点,我认为包含额外的规则是有用的,这样你就可以用exe和目标代码清理目录...这是我原来的模板makefile来自AIX(我在下面使用过) Linux也......)感谢迈克的抬头!

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:0)

天儿真好,

我更倾向于将调试选项作为Makefile中的宏。

CPP = cl

CPPFLAGS = /Od /D "WIN32" /D "_CONSOLE" /D \
    "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 \
    /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 \
    /nologo /c /ZI /TP /errorReport:prompt

#DEBUG = /D "_DEBUG"
DEBUG =

.SUFFIXES: .exe .cpp

Exercise35.exe:
    ${CPP} Exercise35.cpp ${CPPFLAGS} ${DEBUG}

然后注释掉你不想使用的DEBUG宏的版本。

BTW最好使用$ {}而不是$()来引用Makefile宏,因为圆括号用于将对象替换为归档,而大括号则不是。

编辑:如果您正在学习制作文件和制作文件,那么我强烈建议您阅读“Managing Projects with GNU Make”的前几章。它将帮助您了解make的行为的一些非直观方面,尤其是。它是向后链接的行为。

如果你能找到一个不那么具体的小版本的副本,那就更好了。它的解释要好得多恕我直言。

编辑2:以下是本书第一版的亚马逊网站链接,简称为“Managing Projects with Make”。正如我上面所说的那样,为什么make的行为与它的行为有很好的描述。

HTH

欢呼声,