1
我有一個例子集合,我想確保它們編譯失敗。使用* GNU Makefile的最佳方法是什麼?Gnu Makefile,編譯應該失敗
test_nocompile: $(NOCOMPILE_CPP)
for cpp in $(NOCOMPILE_CPP) ; do \
echo === $$cpp === ; \
if $(CXX) $(CXXFLAGS) -c -o fail.o $$cpp ; then echo ok ; else exit 1; fi ; \
done
正如你所看到的,我有幾個困難,在這裏:
- 訪問殼變量
cpp
:$cpp
,\$cpp
和$$cpp
都不起作用。 - 即使使用我的
if
,在第一次g ++編譯失敗後make也會停止。但那正是我想要的。我不想g ++ - 編譯被認爲是正確的行爲。 - Makefiles中的Shell for for循環不是最好的主意。有沒有更好的辦法?我想不出來,因爲我預計編譯失敗,我沒有一個正確的目標,對吧?
高級可選:
- 如果我能管理有故障檢查以上的工作,我可以嘗試編譯第二遍,這一次額外的
-DEXCLUDE_FAIL
,其取出我的例子中的違規行,然後代碼應該編譯。任何想法? - 或者應該爲此寫一個Python腳本...? ;-)
編輯:
我想我的「高級可選」給了我一個非常好的主意,現在。我可以再次使用依賴檢查。這裏只是一個粗略的草圖:
NOCOMPILE_CPP := $(wildcard nocompile/ *.cpp)
NOCOMPILE_XFAILS := $(addsuffix .xfail,$(basename $(NOCOMPILE_CPP)))
%.xfail: %.cpp
if $(CXX) $(CXXFLAGS) -o [email protected] $< ; then exit 1 ; else echo OK ; fi
$(CXX) $(CXXFLAGS) -DEXCLUDE_FAILCODE -o [email protected] $<
test_nocompile: $(NOCOMPILE_XFAILS)
這是優雅嗎?那麼我只需要研究-DEXCLUDE_FAILCODE
如何使失敗的測試工作....非平凡,但可行。我認爲這可以做到,對吧?
唉唉!是的,我之前糾錯過。當然它的if。 Prrrrr ... *我認爲用「高級選項」我可以有再次工作的目標檢查* ...等等,我將編輯問題... – towi
@towi:但至於'-DEXCLUDE_FAIL '這很容易在劇本中完成。首先檢查它是否不編譯,如果是的話退出。然後用define檢查編譯。腳本的返回碼應該是這個命令的返回碼,這就是你需要的。 – 2011-03-15 08:56:42
@towi:爲什麼不是'$(NOCOMPILE_CPP:.cpp = .xfail)'?你也可以考慮'! $(CXX)',它將否定結果並在需要時自動退出→不需要if。 – 2011-03-15 09:07:00