2014-05-15 39 views
1

是否有任何方法可以爲我的系統設置scons將使用的環境變量,而無需更改SConstruct文件?例如,我想在Windows上使用MinGW而不是VC++構建我的C++版本。我可以,當然,在我SConstruct文件做到這一點:將scons的環境變量設置爲在我的系統上全局使用

env = Environment(tools = ['mingw']) 

但如果我這樣做,然後我編輯的東西進入我的構建文件,使其具體到我的特殊的系統配置。在我看來,這打破了便攜式構建系統的全部目的。如果我將其作爲我的存儲庫的一部分上傳給他人構建,他們可能不會使用MinGW。他們可能想要使用VC++或Clang,並且我認爲他們不應該修改構建文件(或者存儲庫中的其他任何內容)以構建程序或庫。理想情況下,任何人在環境中安裝了功能強大的C++工具鏈和scons的應用程序只能在命令行上輸入scons,並且事情應該順利進行。這不是scons的(或者)目標嗎?還是我誤解了它的目的?

另一件事是路徑。上面的代碼還不夠,我仍然需要導入MinGW二進制文件的路徑。我讀過這個理由。但是這只是更多系統特定的信息,我必須將其放入我的構建文件中,其他人可能會使用所選擇的路徑不適用的信息。

回答

0

我想你的確瞭解關於它是便攜式和多平臺:)

這裏的問題是,如果你有多個編譯器從系統上進行選擇,如何告訴SCons的其中之一SCons的目的使用。默認情況下,SCons將查找並使用特定於系統的編譯器(例如,在windows或g ++上的VC++)。

我能想到的告訴SCons的要使用的編譯器,這兩者都需要在構建腳本額外的邏輯的至少2種方式,但可在一個可移植的方式來完成:

  1. 環境變量
  2. 命令行參數

我想,除非用戶調用帶參數/變量指示它使用一個不同的scons的使用特定系統的編譯器總是考慮。

如果您選擇使用環境變量,您可以用標準的Python代碼,如下,並解釋here

import os 

some_var = os.environ['SOME_VAR'] 

或者,如果您選擇使用命令行參數,你可以找到一切你需要here

就個人而言,我更喜歡命令行選項,因爲它比env變量更明確。使用環境變量,用戶可能因爲他們沒有意識到的環境變化而獲得不想要的結果。

+0

但這不需要修改SConstruct文件?自從我問了這個問題後,我瞭解到了「site_init.py」文件,它允許我設置一些系統特定的設置。但我無法弄清楚它將如何讓我爲SConstuct文件創建的Environment對象設置默認選項。 –

+0

@BenjaminLindley是的,用這個答案你需要修改構建腳本,但是我從你的問題理解你正在尋找一種可移植的方式來設置編譯器,並且確實可以編輯構建腳本。如果您要編輯site_init.py,請考慮設置DefaultEnvironment,如下所述:http://www.scons.org/doc/production/HTML/scons-user.html#idm12919064 – Brady

+0

不,重點是不必修改構建腳本。當我談到「可移植構建系統」時,對我而言,這意味着,理想情況下,如果您創建了一個在您的系統上構建和運行的項目(使用可移植代碼),我應該能夠完全構建和運行項目不同的系統,沒有任何改變你的項目,其中包括構建文件。不幸的是,scons爲我做了太多的假設。我不介意告訴scons如何在我的系統上編譯C++,但我只想做一次,我希望它適用於所有項目,我的或其他人。 –

0

嘗試編輯文件site_init.py在這些目錄中的一種:

%ALLUSERSPROFILE/Application Data/scons/site_scons 
%USERPROFILE%/Local Settings/Application Data/scons/site_scons 
%APPDATA%/scons/site_scons 
%HOME%/.scons/site_scons 
./site_scons 

在該文件中,添加這樣一行:

DefaultEnvironment(tools = ['mingw']) 

也許這樣的:

DefaultEnvironment(tools = ['default', 'mingw']) 
相關問題