我涉及cmake,它似乎會生成遞歸makefile。這意味着在一個大項目中,空構建可能需要5秒左右,這實在令人無法接受。cmake可以生成非遞歸生成文件嗎?
我還沒找到用cmake生成非遞歸makefile的方法。可能嗎?
我涉及cmake,它似乎會生成遞歸makefile。這意味着在一個大項目中,空構建可能需要5秒左右,這實在令人無法接受。cmake可以生成非遞歸生成文件嗎?
我還沒找到用cmake生成非遞歸makefile的方法。可能嗎?
這是不可能的,因爲CMake。
通過修改CMake的源碼可能是可能的......但我不確定這樣的任務有多大或多麼簡單或複雜。
可以肯定,它會花費超過5秒,但。即使在未來幾年你會做的所有空架構中都會增加。
如果5秒對於您的空構建不可接受,可接受的閾值是多少? 1秒? 0.25秒?只是好奇 - 有很多工作儘量減少大型項目的空閒構建時間。
CMake使用遞歸make,因爲它必須。 CMake是一個通用工具,並且必須即時生成依賴信息。爲了與make(不僅僅是gmake)兼容,你必須使用遞歸make來做到這一點。 CMake也支持多級代碼生成器。有人可能會爲CMake寫一個tup生成器。 CMake和忍者正在做一些工作。但是,如果沒有一定程度的遞歸製作,使用簡單make生成器就無法做到CMake所做的事情。
「我不相信CMake'必須'使用遞歸'如果您可以創建一個非遞歸的makefile並且可以使用多於gmake的工作,並且可以即時計算依賴信息,那麼它就會證明它錯誤。我們花了相當多的時間試圖讓它不能遞歸。它以前是「少」遞歸的。
布拉德國王創造了一個FAQ條目描述提出的是在CMake的使用方式:
你沒有說服我。即使是普通的老版本也支持'a.o:a.c; a.exe:a.o b.a; b.o:b.c; b.a:b.o'。我看不出爲什麼不能做到這一點。 –
我不相信CMake'必須'使用遞歸。我認爲他們這樣做是因爲它更容易實施。它讓我花了2天時間來調用make來調用一次,找到源和轉儲對象到一個單獨的源位置 - 對於遞歸調用,這將是半天。 – Oliver
閱讀CMake FAQ,它通過遞歸make澄清了它的含義。它不是傳統意義上的遞歸,即每個子目錄都有自己的makefile。但是,它是一個3級遞歸,似乎在一個遞歸(第2層)中生成構建依賴關係,然後在另一個遞歸(第3層)中調用實際構建步驟。如果這是不可接受的,他們還建議使用忍者而不是使用忍者。 – jfritz42
雖然答案仍然是Makefile文件一樣,最新版本(2.8.9的CMake 8月9日發佈, 2012)包括默認啓用的忍者生成器。在一個相對較大的C++代碼庫(Torque3D--大約241個目錄中的大約40M源文件)中,忍者平均需要(從10次運行)0.14秒來決定沒有什麼可做的事情,並且它平均需要,從10次運行)2.55秒(次數基於已經完全沒有剩下要做的項目)
因此,CMake &忍者可能是一個很好的選擇,如果你覺得Make太慢。你在答覆中提到Tup。忍者似乎有與Tup類似的目標。
find Torque3D/Engine -iname ".c" -or -iname ".cpp" -or -iname "*.h" | xargs dirname | sort -u | wc -l
是的,忍者非常棒,事實上在Cmake中有忍者的實驗支持,但如果我已經使用忍者 - 我可能會推出我自己的腳本來生成忍者文件。或者使用gyp。 –
空構建的門檻是「不明顯」,所以多單第二少可能是OK。有很好的構建工具可以實現這個合理的大項目。即使簡單的非遞歸makefile也可以做到。空的構建5秒只是瘋狂的,我不明白爲什麼'cmake'決定首先發布遞歸makefile(這對小項目是有意義的,但是對於小項目你是不會的需要'cmake''''tup'查看整個linux發行版的空構建小於'.5'秒 –