Makefile - 只需执行make install(复制文件),无需构建目标

4

我有一个简单的Makefile项目,我只想要make install将文件复制到目标文件夹中,即:

all:
   @echo "Nothing to build"

install:
   cp ./*.wav /usr/share/snd

my_custom_target:
   @echo "For testing purposes"

然而,每当我尝试构建任何目标(例如:clean、all、install、my_custom_target等),它们都仅仅回显“Nothing to be done for 'clean'”,“Nothing to be done for 'all'”等。我猜想一个makefile项目希望至少构建一些东西(例如:C/C++文件等)。
有人对如何解决这个问题有什么建议吗?
谢谢。
1个回答

7
这似乎表明make无法找到或无法正确解析您的Makefile。文件名是什么?
此外,请确保每个规则中的命令(例如cp ./*.wav /usr/share/snd)都以实际制表符而不是空格为前缀。在您粘贴的示例中,它们只是以三个空格为前缀,但为了使make正确解析它们,它们需要以实际制表符为前缀。
还有一件要检查的事情是是否存在名为allinstallmy_custom_target的文件。Make并不关心是否构建了某些C或C++文件;规则可以执行任何你想要的操作。但它会检查是否有与该规则同名的文件,以及它是否比规则的依赖项更新。如果有一个文件,并且它比所有依赖项更新(或者没有依赖项,就像这个例子),那么它将决定没有任何事情要做。为了避免这种情况,请添加一个.PHONY声明,表示这些是虚拟目标,不对应要构建的实际文件;然后make将始终运行这些配方,无论是否存在具有相同名称的最新文件。
.PHONY: all install my_custom_target

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接