2010-10-11 84 views
1

是否可以通過預處理器宏生成嵌入式Unix時間戳?預處理器時間戳

例如:#define VERSION_EXPIRE __TIMESTAMP__

這樣做的原因是,我有測試版,我想生成編譯期的到期時間戳(在一個特殊的生成配置)。

+0

類似http://stackoverflow.com/questions/25771/output-compile-time-可視化的可執行文件。但是因爲你需要一個Unix時間戳,所以困難在於將'__DATE__'和'__TIME__'宏返回的值轉換爲Unix格式,同時仍然在預處理中。 – AlcubierreDrive 2010-10-11 11:14:41

回答

6

我如下解決它:

#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]; 
} 
+0

這樣做的缺點是每次都不要忘記清除目標,否則預編譯的內容不會改變! – 2010-10-11 12:30:38

2

如果您想使用版本的軟件,如svngit你可能有一個像$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" 
+1

我沒有意識到這一點。你能否將我引用到這個文檔(我使用git)? – 2010-10-11 12:16:08

+0

@Erik:看我的編輯 – 2010-10-11 14:39:43