是否可以通過預處理器宏生成嵌入式Unix時間戳?預處理器時間戳
例如:#define VERSION_EXPIRE __TIMESTAMP__
這樣做的原因是,我有測試版,我想生成編譯期的到期時間戳(在一個特殊的生成配置)。
是否可以通過預處理器宏生成嵌入式Unix時間戳?預處理器時間戳
例如:#define VERSION_EXPIRE __TIMESTAMP__
這樣做的原因是,我有測試版,我想生成編譯期的到期時間戳(在一個特殊的生成配置)。
我如下解決它:
#define VERSION_TIMESTAMP __DATE__" "__TIME__"\x0"
在其他一些類
+ (NSDate *)versionExpiresInDays:(NSUInteger)days {
NSString *dateString = [NSString stringWithUTF8String:VERSION_TIMESTAMP];
NSLocale *enLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
NSDate *compiledOn = [NSDate dateWithNaturalLanguageString:dateString locale:enLocale];
return [compiledOn dateByAddingTimeInterval:days*24*60*60];
}
這樣做的缺點是每次都不要忘記清除目標,否則預編譯的內容不會改變! – 2010-10-11 12:30:38
在使用sed替換__TIMESTAMP__
並使用date
進行預處理之前添加一個自定義構建步驟。最簡單的方法是tell Xcode to use a makefile。
如果您想使用版本的軟件,如svn
或git
你可能有一個像$Id: $
自動替換字符串的或$Date: $
由特定版本的文件(svn)或「HEAD」版本(git)的id或日期。
編輯:爲git
,你可以提取來源
git archive --format=zip -9 -o project.zip HEAD file1 file2...
在這段過程中,你必須告訴蠢貨,.gitattributes
,你想擁有的東西替換某些字符串取代:
file* export-subst
有關「$ ... $」之間的術語和術語的語法,請參閱手冊頁git-log
中的格式。正如例子我在我的代碼
#define P99_VERSION_DATE "$Format:%cd$"
#define P99_VERSION_ID "$Format:%H$"
其中在文件的分發版本是
#define P99_VERSION_DATE "Thu Oct 7 23:38:43 2010 +0200"
#define P99_VERSION_ID "6f9740a6808ff50f42d24bb7b5234a904f84e6fe"
我沒有意識到這一點。你能否將我引用到這個文檔(我使用git)? – 2010-10-11 12:16:08
@Erik:看我的編輯 – 2010-10-11 14:39:43
類似http://stackoverflow.com/questions/25771/output-compile-time-可視化的可執行文件。但是因爲你需要一個Unix時間戳,所以困難在於將'__DATE__'和'__TIME__'宏返回的值轉換爲Unix格式,同時仍然在預處理中。 – AlcubierreDrive 2010-10-11 11:14:41