Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 使用GNU make复制源文件_Makefile_Gnu - Fatal编程技术网

Makefile 使用GNU make复制源文件

Makefile 使用GNU make复制源文件,makefile,gnu,Makefile,Gnu,我在另一篇文章中问了这个问题,但可能太模糊了,所以我会再试一次 我有一个LinuxGNUC项目,它需要为两个不同的硬件设备构建输出,使用一个通用的C源代码库,但不同的makefile。有足够的磁盘空间,所以我不介意在两个不同的目录中有两个相同源文件的副本。目标使用不同的处理器,因此生成的obj和exe文件完全不同,即使编译的代码几乎相同(不同的预处理器指令等) 我正在测试一个小的makefile来实现这一点。它需要处理.c和.h文件,但目前只处理.c文件。源目录是“/mnt/hgfs/works

我在另一篇文章中问了这个问题,但可能太模糊了,所以我会再试一次

我有一个LinuxGNUC项目,它需要为两个不同的硬件设备构建输出,使用一个通用的C源代码库,但不同的makefile。有足够的磁盘空间,所以我不介意在两个不同的目录中有两个相同源文件的副本。目标使用不同的处理器,因此生成的obj和exe文件完全不同,即使编译的代码几乎相同(不同的预处理器指令等)

我正在测试一个小的makefile来实现这一点。它需要处理.c和.h文件,但目前只处理.c文件。源目录是“/mnt/hgfs/works/firmware\u us10c”,我正在复制到兄弟目录“/mnt/hgfs/works/firmware\u us100c”。这就是它看起来的样子:

%.c : ../firmware_us10c/%.c
<tab>cp $< $@
我用“stat”验证了main.c和源文件夹中的许多其他文件都是较新的,因此应该有很多目标。有人能帮我修复这个简单的makefile吗?如何将其更改为同时处理.h文件? 提前谢谢-格雷格

编辑:谢谢@PW的输入。我现在有这个:

DEST = $(addprefix ../firmware_us100c/, $(wildcard *.c))
all: $(DEST)
../firmware_us100c/%.c: %.c
    cp $< $@
DEST=$(addprefix../firmware\u us100c/,$(通配符*.c))
全部:$(目的地)
../firmware_us100c/%.c:%.c
cp$<$@
我如何扩展它以涵盖.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 $< $@
../firmware_us100c/%.h: %.h
    cp $< $@
../firmware_us100c/zem510/%.c: zem510/%.c
    cp $< $@
../firmware_us100c/zem510/%.h: zem510/%.h
    cp $< $@
../firmware_us100c/fpsensor/%.c: fpsensor/%.c
    cp $< $@
../firmware_us100c/fpsensor/%.h: fpsensor/%.h
    cp $< $@
../firmware_us100c/iclock/%.c: iclock/%.c
    cp $< $@
../firmware_us100c/iclock/%.h: iclock/%.h
    cp $< $@
DEST=$(addprefix../firmware\u us100c/,$(通配符*.c))
DEST+=$(addprefix../firmware\u us100c/,$(通配符*.h))
DEST+=$(addprefix../firmware_us100c/,$(通配符zem510/*.c))
DEST+=$(addprefix../firmware_us100c/,$(通配符zem510/*.h))
DEST+=$(addprefix../firmware_us100c/,$(通配符fpsensor/*.c))
DEST+=$(addprefix../firmware_us100c/,$(通配符fpsensor/*.h))
DEST+=$(addprefix../firmware\u us100c/,$(通配符iclock/*.c))
DEST+=$(addprefix../firmware_us100c/,$(通配符iclock/*.h))
全部:$(目的地)
../firmware_us100c/%.c:%.c
cp$<$@
../firmware_us100c/%.h:%.h
cp$<$@
../firmware_us100c/zem510/%.c:zem510/%.c
cp$<$@
../firmware_us100c/zem510/%.h:zem510/%.h
cp$<$@
../firmware_us100c/fpsensor/%.c:fpsensor/%.c
cp$<$@
../firmware_us100c/fpsensor/%.h:fpsensor/%.h
cp$<$@
../firmware\u us100c/iclock/%.c:iclock/%.c
cp$<$@
../firmware\u us100c/iclock/%.h:iclock/%.h
cp$<$@
如果有更干净的方法,请告诉我


编辑:感谢@PW为清理它所做的额外编辑。还有一件事是有帮助的。是否有方法反转逻辑,使其在目标(target)目录中运行?实际上,编辑后我必须在目录之间来回切换,以更新源代码,然后运行makefile。我尝试了一些方法,但无法解决问题。

您的makefile中有规则,但没有目标

CP = cp
# CP = cp -p # if you want to preserve dates
DEST = $(addprefix your_dest_folder/, $(wildcard *.c *.h))

all: $(DEST)

your_dest_folder/%.c: %.c
    $(CP) $< $@

your_dest_folder/%.h: %.h
    $(CP) $< $@

.PHONY: all
CP=CP
#CP=CP-p#如果要保留日期
DEST=$(添加您的\u DEST\u文件夹前缀/,$(通配符*.c*.h))
全部:$(目的地)
您的目标文件夹/%.c:%.c
$(CP)$<$@
您的目标文件夹/%.h:%.h
$(CP)$<$@
冒牌货:全部

由于您有子字段,请将通配符更改为
$(通配符*/*.c*/*.h)

这就是生成文件中的全部内容吗?是的,项目生成器位于单独的生成文件中。如果我能找到方法,我会合并它,这样它会更新源文件,然后构建项目。我不确定这意味着什么。在这部分工作之前,我无法合并任何内容。这就是我在这里要问的。你应该解释你的答案并给出一个例子。这只需稍加修改即可。我删除了-p,因为我希望更新目标日期戳。我的示例从目标文件夹运行,而你的示例从源文件夹运行。见我的编辑上面。
CP = cp
# CP = cp -p # if you want to preserve dates
DEST = $(addprefix your_dest_folder/, $(wildcard *.c *.h))

all: $(DEST)

your_dest_folder/%.c: %.c
    $(CP) $< $@

your_dest_folder/%.h: %.h
    $(CP) $< $@

.PHONY: all