我目前的工作流程:檢索版本號在VS與QMAKE
hg update
(或任何一個用來簽出修訂版)MyProject.pro
→qmake
→MyProject.vcproj
- 打開Visual Studio ,編輯文件
- 構建項目
在構建步驟中,如何使用來自版本控制系統(例如,Windows)的信息更新我的config.h
頭文件。 hg id
)?
MyProject.vcproj
由產生qmake
,所以我不應該手動編輯它。
我目前的工作流程:檢索版本號在VS與QMAKE
hg update
(或任何一個用來簽出修訂版)MyProject.pro
→qmake
→MyProject.vcproj
在構建步驟中,如何使用來自版本控制系統(例如,Windows)的信息更新我的config.h
頭文件。 hg id
)?
MyProject.vcproj
由產生qmake
,所以我不應該手動編輯它。
您可以在qmake中執行外部命令。使你的來源提供的信息最簡單的方法是使用一個定義:
HGID = $$system(hg id)
DEFINES += HGID=\\\"$$HGID\\\"
我不知道您是否可以從QMAKE編輯外部文件。您可以使用外部工具,但在Windows上,您通常沒有像sed
這樣的東西,所以它可能會有點問題。
一個opton是爲了啓用Keyword Extension。把這樣的事情在你的hgrc(或Mercurial.ini如果那是你的事):config.h中放
[extensions]
hgext.keyword=
[keyword]
config.h =
[keywordmaps]
HGREV = {node}
然後:
#define HGREV "$HGREV$"
您可能需要解析的十六進制值出來的「$ HGREV:deadbeefdeadbeef $」你會得到,但這很容易通過訪問HGREV定義的任何代碼完成。
您可以使用自定義構建目標和關鍵字來完成此操作。假設config.h.in
有如下因素格式:
#define HGID $HGID
您可以自定義一個構建目標將處理hgid.h.in
並輸出到hgid.h
建立你的主要目標如下之前:
hgid.target = hgid
hgid.commands = sed s/\\\$$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid
轉換爲Visual Studio項目(使用qmake)後,我無法使其工作。它似乎消失了。如果將相同的命令添加到'QMAKE_POST_LINK',那麼它將在後期構建步驟中正確顯示。(但是對於這種用例來說,已經晚了很多。) – 2013-02-06 11:50:09
除了盧卡斯·拉林斯基和goodrone的評論,我想提一下,qmake可以直接鏈接到腳本,不僅僅是它的輸出。所以可以說
DEFINES += REPO_ID=\\\"`./setlocalversion.sh`\\\"
並且腳本將被新鮮地執行每個單個目標。
如果shell命令包含空格,qmake會在命令中插入'-D',這不起作用。你必須用'''圍繞這個: ''\\\「\'./setlocalversion.sh --some --parameters \'\\\」''' (什麼逃脫地獄:SO標記, qmake,make,shell ...) – iliis 2014-06-03 08:30:17
另一個複雜因素是:如果您的命令的輸出中包含空格,那麼您需要另一層雙引號。但是,你不能用反引號執行代碼,你必須使用'$(shell)':詳細信息請參見http://stackoverflow.com/a/24010395/211520。 – iliis 2014-06-03 08:51:54
該命令將在qmake運行期間執行。我想在編譯源代碼之前執行它。似乎沒有簡單的方法來做到這一點。 – 2009-10-08 18:30:46