【问题标题】:mingw32-make only runs the first dependency linemingw32-make 只运行第一个依赖行
【发布时间】:2020-01-23 21:27:24
【问题描述】:

我的 Makefile:

helloworldlib.obj: helloworldlib.cpp
    g++ -Wall -o helloworldlib.obj -c helloworldlib.cpp

helloworld.obj: source.cpp
    g++ -Wall -o helloworld.obj -c source.cpp

helloworld.exe: source.cpp helloworld.obj
    g++ -Wall -o helloworld.exe helloworld.obj helloworldlib.obj

我不确定这有什么问题,当我运行 mingw32-make 时,它​​只执行第一个 g++ -Wall -o helloworldlib.obj -c helloworldlib.cpp。 据我所知,这个 makefile 在语法上是正确的,mingw 似乎无法找到其他行。

【问题讨论】:

    标签: makefile mingw mingw-w64


    【解决方案1】:

    这就是make 的工作原理。如果命令行上没有提供目标(例如mingw32-make helloworld.exe),默认情况下它会构建文件中定义的第一个目标。例如:https://stackoverflow.com/a/2057716/2249356

    作为一种快速修复,您可以将helloworld.exe 的规则移到文件顶部,然后make 将全部构建。

    而且,我认为最后一条规则应该是这样的

    helloworld.exe: helloworld.obj helloworldlib.obj
        g++ -Wall -o helloworld.exe helloworld.obj helloworldlib.obj
    

    然后将 source.cpp 及其目标代码 helloworld.obj 作为依赖项。

    【讨论】:

    • 谢谢,这对我有用。顺便说一句,你知道为什么使用ming32-make-B(使所有目标)开关不起作用,如果它确实读取了其他行吗?
    • 很遗憾,不,我从未使用过-B。文档很简短,可能有一些限制。
    • -B 的文档说:Consider all targets out-of-date。这意味着即使没有更改源,它也将始终重建所有依赖项。但是你仍然需要选择实际的目标,或者它像以前一样使用makefile中的第一个。
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多