我正在使用GNU make來構建一組靜態庫,使用隱式make規則來執行此操作。這些規則運行ar(1)命令來更新庫/歸檔。分析表明,如果使用-j選項在構建過程中運行並行作業,構建時間將會縮短。如何避免在使用GNU make進行並行存檔文件構建時遇到併發問題?
不幸的是,GNU使手動有一節 http://www.gnu.org/software/make/manual/html_node/Archive-Pitfalls.html這幾乎說,讓不提供併發衛士運行AR(1),因此可以(不)腐敗存檔。該手冊進一步調查了這可能在未來得到解決。
對此的一個解決方案是使用http://code.google.com/p/ipcmd,它在運行命令之前基本上會執行信號量鎖定,從而序列化構建存檔的ar(1)命令。這個特殊的解決方案對我來說並不好,因爲我在Windows上使用基於mingw的交叉編譯工具進行構建。
有沒有更簡單或更好的解決方案來解決這個問題?
我認爲你需要ranlib存檔,而不是objs。可能你也可以使用$ ^作爲規則中的對象文件。 – user1143888 2012-04-04 01:21:06