我有 3 个关于以更少的步骤编译和链接我的项目的问题......
首先,我的项目看起来像:(我使用 Watcom C 编译//链接我的项目)
目录“MyProject”包含 3 个用于不同模块和一些文件的子目录:
- 目录“A”(包括 ah 和 ac)
- 目录“B”(包括 bh 和 bc)
- 目录“C”(包括 ch 和 cc)
- my.c 和 my.h
- 我的.lnk
- 生成文件
在每个子目录中都有一个对应的makefile ...
[Q1]假设我在目录 A 中更新 ah 并且 ah 被目录 B 中的 bc 引用,那么我的原始步骤将是:
- 在目录 A 中编译(生成 obj 和 lib...)
- 在目录 B 中编译( obj 和 lib 生成...)
- 返回目录 MyProject 然后编译并链接
我可以迈出一步来覆盖上面吗?
[Q2]如果我想忽略所有现有的 obj/lib 并全部重建,该怎么做?
- 我知道这需要时间,但有时“杀戮和重建”会更好......
[Q3]如果 my.h 被更新并且它被 ac、bc 和 cc 引用。
我可以迈出一步来覆盖上面吗?
[我在子目录中的 makefile看起来像]
INCLUDE1 = -ic:\watcom\h
OBJECTS1 = a.obj
CFLAGS = -zq -mf -oxsbl $(INCLUDE1)
DEST = a.exe
COMPILER = wpp386
.erase # special cmd, tell wmake to "erase" target if make is not successful
.cpp.obj: .AUTODEPEND
$(COMPILER) $(CFLAGS) $<
$(DEST) : $(OBJECTS1) makefile
[我在主目录中的 makefile看起来像]
INCLUDE1 = -i=c:\myproj\my -i=c:\watcom\h
OBJECTS1 = my.obj
CFLAGS = -zq -fp6 -mf -6r -s -oxsbl $(INCLUDE1)
DEST = my.exe
COMPILER = wpp386
LINKER = wlink
LNK_FILE = my.lnk
.erase # special cmd, tell wmake to "erase" target if make is not successful
.cpp.obj: .AUTODEPEND
$(COMPILER) $(CFLAGS) $<
$(DEST) : $(OBJECTS1) makefile my.lnk
$(LINKER) @$(LNK_FILE)
[更新 1]
我使用 wpp386 作为编译器,它是 watcom c++ 工具。
为了构建目标,我使用一个批处理文件来编译 cpp 文件:
@echo off
del a1.lib
del *.err
wmake -h
wlib -q a1.lib + a.obj
del *.obj
- 我可以成功编译cpp文件,一切都很好。
- 在目录B,我用同样的方式(批处理文件+makefile)编译b.cpp
总结一下我的项目工作以及我问的原因是如果我只是更新一些头文件来找到“更快的编译/链接序列”......
我尝试将命令添加ehco hello
到规则中$(DEST)
,发现没问题。然后使用echo $(MAKE)
并得到:
...
echo C:\WATCOM\BINW\WMAKE.EXE
C:\WATCOM\BINW\WMAKE.EXE
...
谢谢 !