【问题标题】:Why is gnu make ignoring my explicit pattern rule and using a built-in implicit rule instead?为什么 gnu make 忽略我的显式模式规则而使用内置的隐式规则?
【发布时间】:2012-02-08 08:32:06
【问题描述】:

我的 makefile 有这个规则/配方:

%o: %cpp Makefile
    g++ -Wall -Wextra -MMD -MP -O2 -c -o $@ $<

在我最近升级 Cygwin 并获得 Make 3.82.90(以前的版本可能是 3.81)之前,这一直很好。

现在使用 make 3.82,它会忽略我的规则,而是使用内置规则来编译每个文件,例如:

g++    -c -o Foo.o Foo.cpp

【问题讨论】:

    标签: makefile explicit rule recipe


    【解决方案1】:

    我的模式没有分隔百分号和扩展名的点(句点)。改成这样就解决了问题:

    %.o: %.cpp Makefile
        g++ -Wall -Wextra -MMD -MP -O2 -c -o $@ $<
    

    【讨论】:

    • 您实际上可以改用内置规则,方法是在规则之前定义CPPFLAGS 和/或CXXFLAGS 变量,因为如果您运行make -np,您会看到,内置规则定义了 ${COMPILE.cc} -c -o $@ $&lt; 之类的东西,其中 COMPILE.cc 设置为 ${CC} ${CXXFLAGS} ${CPPFLAGS} 之类的东西——如果它不同,那么它只会扩展这些,据我所知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多