我在另一个帖子中问了这个问题,但可能太含糊,所以我再试一次。使用GNU make来复制源文件
我有一个Linux GNU C项目,需要为两个不同的硬件设备构建输出,使用通用的C源代码库,但使用不同的makefile。有很多磁盘空间,所以我不介意在两个不同的目录中有两份相同的源文件。目标使用不同的处理器,所以生成的obj和exe文件是完全不同的,即使编译的代码几乎相同(不同的预处理器指令等)。
我正在测试一个小的makefile来做到这一点。它需要处理.c & .h文件,但现在只能执行.c。源目录是“/ mnt/hgfs/works/firmware_us10c”,我正在复制到兄弟目录“/ mnt/hgfs/works/firmware_us100c”。这是什么样子:
%.c : ../firmware_us10c/%.c
<tab>cp $< [email protected]
当我测试这个文件“使-f测试-n”它回应:
make: *** No targets. Stop.
我与“统计”是main.c中,许多验证源文件夹中的其他人更新,所以应该有很多目标。有人可以帮我修复这个简单的makefile吗?我怎么改变它来处理.h文件呢? 在此先感谢 - 格雷格
编辑:谢谢@PW为您的输入。我现在有这个:
DEST = $(addprefix ../firmware_us100c/, $(wildcard *.c))
all: $(DEST)
../firmware_us100c/%.c: %.c
cp $< [email protected]
我该如何扩展它来覆盖.h文件呢?
编辑:我玩过它,想出了这个来处理.h文件,以及需要更新的三个子目录。
DEST = $(addprefix ../firmware_us100c/, $(wildcard *.c))
DEST += $(addprefix ../firmware_us100c/, $(wildcard *.h))
DEST += $(addprefix ../firmware_us100c/, $(wildcard zem510/*.c))
DEST += $(addprefix ../firmware_us100c/, $(wildcard zem510/*.h))
DEST += $(addprefix ../firmware_us100c/, $(wildcard fpsensor/*.c))
DEST += $(addprefix ../firmware_us100c/, $(wildcard fpsensor/*.h))
DEST += $(addprefix ../firmware_us100c/, $(wildcard iclock/*.c))
DEST += $(addprefix ../firmware_us100c/, $(wildcard iclock/*.h))
all: $(DEST)
../firmware_us100c/%.c: %.c
cp $< [email protected]
../firmware_us100c/%.h: %.h
cp $< [email protected]
../firmware_us100c/zem510/%.c: zem510/%.c
cp $< [email protected]
../firmware_us100c/zem510/%.h: zem510/%.h
cp $< [email protected]
../firmware_us100c/fpsensor/%.c: fpsensor/%.c
cp $< [email protected]
../firmware_us100c/fpsensor/%.h: fpsensor/%.h
cp $< [email protected]
../firmware_us100c/iclock/%.c: iclock/%.c
cp $< [email protected]
../firmware_us100c/iclock/%.h: iclock/%.h
cp $< [email protected]
如果有更清洁的方式,请让我知道。
编辑:谢谢@PW的额外编辑来清理它。还有一件事会有帮助。有没有方法来逆转逻辑,以便它将在目标(目标)目录中运行?因为我必须在编辑后的目录之间切换回&以更新源文件,然后运行makefile。我尝试了一些东西,但无法弄清楚。
那是*所有*您在Makefile中有吗? – bmargulies
是的,项目生成器位于单独的生成文件中。如果我能弄清楚如何,我会将它合并,以便更新源文件,然后构建项目。 – pwrgreg007
您与包含合并。 – bmargulies