簡體   English   中英

通用Makefile中必需的預構建規則

[英]Required prebuild rule in generic Makefile

我正在通過makefiles為Webots(機器人模擬器)編譯C ++代碼,並且使用通用的makefile Makefile.include Webots提供的資源來簡化此過程。

我通過自己的makefile進行構建,設置了一堆必需的變量,然后調用該makefile來設置所有必需的編譯規則。 無論如何,這就是應該的方式。

我收到以下錯誤:

make[1]: *** No rule to make target 'USER_PREBUILD'.  Stop.
/usr/share/webots/resources/Makefile.include:503: recipe for target 'pre-build' failed
make: *** [pre-build] Error 2

並查看相關的行(來自Makefile.include ):

$(SUPPORTED_TARGETS): post-build

USER_PREBUILD:

USER_POSTBUILD:

pre-build:
    @$(MAKE) --silent USER_PREBUILD

post-build: main-build
    @$(MAKE) --silent USER_POSTBUILD

$(TARGETS): pre-build

main-build: $(TARGETS)

我不確定在pre-buildpost-build調用make時是否沒有語法錯誤,或者USER_PREBUILDUSER_POSTBUILD應該是具體文件,但是即使將它們替換為$(USER_PREBUILD)$(USER_PREBUILD)得到*** No targets specified and no makefile found 因此,我假設我需要在調用外部makefile之前設置這些變量,但是如果在構建之前我無須做的事情,語法到底是什么呢?

奇怪的是,即使出現這些錯誤,程序仍會編譯(我在build文件夾中得到了* .o,*。d和二進制文件),但是它從未將二進制文件復制到目標文件夾中。

在該文件中進行設置的方法有點奇怪。

USER_PREBUILD:USER_POSTBUILD:行無效,並且對任何人都沒有做任何事情(至少我知道)。

您有兩種選擇方式來解決此問題。

您可以在生成文件中為USER_PREBUILDUSER_POSTBUILD目標提供空規則:

USER_PREBUILD USER_POSTBUILD: ;

或者您甚至可以避免使用這些行來嘗試運行這些目標(以make發出的壓倒性警告消息為代價):

pre-build: ;
post-build: main-build ;

在包含Makefile.include 之后 ,在您的makefile中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM