'让'当存在具有相同名称但扩展名不同的文件

时间:2015-10-22 23:29:15

标签: makefile

我们通常使用' make'使用适当的编译器编译单个源文件...

make (file_name_with_no_extension)

例如,使用'制作'编译' abc.cpp'是

make abc

make abc.cpp

(下面应该打印消息" abc.cpp&#34没什么可做的;)

所以当同一目录中有两个文件时,例如" abc.c"和" abc.cpp",

make abc

将永远,并且只编译" abc.c"(通过某些默认订单?我不知道)。

对于这样的情况,有没有办法用' make'来构建cpp文件?

2 个答案:

答案 0 :(得分:0)

此“技巧”仅有效,因为它使用built-in rules that exist in make - 执行make -p来概述您的make版本中的所有内置插件。你也会看到为什么.c文件“获胜”:)

但是有两个不同的文件,其目标文件名和默认的可执行文件名相同,对我来说是一个非常糟糕的主意,所以我会重命名其中一个文件。

答案 1 :(得分:0)

  

所以当同一目录中有两个文件时,例如" abc.c"和" abc.cpp",make abc将永远,并且只编译" abc.c"(通过一些默认订单?我不知道)。

正确,您可以看到使用make -p -f /dev/null定义内置规则的顺序,%: %.c是从单个源直接编译的第一个规则,因此它具有优先级。

从命令行覆盖此方法的一种方法是清除.SUFFIXES以识别并定义您自己的make --eval=.SUFFIXES: --eval=.SUFFIXES:.cpp abc ,如下所示:

{{1}}