我正在使用scons實現一個構建系統,用於一個有點大的軟件項目。有一個目錄結構,它將單個庫和程序的代碼分隔到自己的目錄中。使用我們現有的make系統,我可以在一個程序目錄中做一個「make clean」,它只會清除與該目錄中的源相關的文件。如果我做了「scons -c」,它會認識到程序依賴於兄弟(或堂兄弟)目錄中的大量庫,並清除所有這些文件。這不是我想要的,因爲我必須重新構建可能需要幾分鐘的所有這些庫。如何防止scons清除父目錄和兄弟目錄?
我試着玩「NoClean()」命令,但沒有得到它以我需要的方式工作。考慮到代碼庫的大小和目錄結構的複雜性,我無法真實地爲每個庫中的每個文件都有一個NoClean()行。
有沒有什麼辦法可以讓scons忽略當前目錄上的乾淨(即scons -c)時的任何依賴關係?
這似乎適用於最小的測試。這是一個很好的解決方案。我仍然無法讓它爲整個項目工作,但我相當確定這是因爲我在幾乎每個源目錄都克隆了環境。謝謝你。這絕對讓我更好地瞭解我應該如何解決這個問題。 – user2916971
爲了關閉這個循環,我能夠使用Avatar33的建議獲得我想要的行爲。我需要添加的是檢查每個源目錄是啓動目錄還是後代。 \t CurrentDir = env.Dir( '')srcnode()ABSPATH \t如果不是CurrentDir.startswith(env.GetLaunchDir()): \t \t env.NoClean([myobjs,mylib中,安裝]) 這隻能正確清除當前目錄及其後代。如果我從最頂層的目錄執行'scons -c',則會清除整個源代碼樹。 – user2916971
通過目錄控制清潔的好主意。我希望SCons爲此提供了一個選擇。 當我想要清理所有單元測試結果時,這對我的用例沒有幫助,而且這些結果分散在整個項目中,並與「測試」目標相關聯。但是清理「測試」一直傳播到測試所依賴的所有其他方面,直到C++源文件 –