![](/img/trans.png)
[英]GitLab CI: how to build and then cache dependencies, then build them again when something changes in them?
[英]How to change something in the code according to settings in the GitLab CI build script
我的代碼是用 C++ 編寫的
GitLab CI 編譯器:MSVC2017_x64
我的項目正在 Windows 服務器上使用 GitLab 管道編譯。 我希望能夠兩次編譯該項目的一部分,並在編譯之前以某種方式更改代碼中的某些內容,以便我將擁有相同應用程序的兩個版本,但具有不同的預定義設置。
像編譯器在 header 或 cpp 文件中設置#define
這樣簡單的東西會很棒。
使用相同的技術,我還想將內部版本號(管道 ID)硬連接到應用程序中。
我已經嘗試過/D
或-D
參數,但它沒有設置#define
。
無論用戶的設置如何,該解決方案都需要工作,因此環境變量之類的東西將不起作用。
這是我的.gitlab-ci.yml
文件(應用程序最終是使用qmake
和nmake
調用構建的):
stages:
- build
- test
variables:
GIT_SUBMODULE_STRATEGY: recursive
build:
stage: build
only:
- master
tags:
- windows
- qt
script:
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
- call "C:\Qt\5.9.1\msvc2017_64\bin\qtenv2.bat"
- set CL=/MP16
- set PATH="C:\Program Files (x86)\Inno Setup 5";%PATH%
- cd %CI_PROJECT_DIR%\(...)\Application
- qmake CONFIG+=release
- nmake
- cd %CI_PROJECT_DIR%\(...)\3rdParty\Windows
- copy (...)\Application.exe .
- copy (...)\Application.ico .
- windeployqt .
- iscc InnoScript.iss
artifacts:
name: "%CI_COMMIT_REF_NAME%"
expire_in: 1 month
paths:
- (...)\3rdParty\Windows\Application.exe
這就是我想要的樣子(使用-D mode=xy
的):
stages:
- build
- test
variables:
GIT_SUBMODULE_STRATEGY: recursive
build:
stage: build
only:
- master
tags:
- windows
- qt
script:
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
- call "C:\Qt\5.9.1\msvc2017_64\bin\qtenv2.bat"
- set CL=/MP16
- set PATH="C:\Program Files (x86)\Inno Setup 5";%PATH%
- cd %CI_PROJECT_DIR%\(...)\Application
- qmake CONFIG+=release
- nmake -D mode=prod
- qmake CONFIG+=release
- nmake -D mode=stage
- cd %CI_PROJECT_DIR%\(...)\3rdParty\Windows
- copy (...)\Application.exe .
- copy (...)\Application.ico .
- windeployqt .
- iscc InnoScript.iss
artifacts:
name: "%CI_COMMIT_REF_NAME%"
expire_in: 1 month
paths:
- (...)\3rdParty\Windows\Application.exe
如何僅使用 GitLab CI 修改我的代碼,還是有其他更好的方法?
我剛剛發現如何做到這一點。
之前,我試圖將-D
參數添加到nmake
調用,而我需要將DEFINES+=MY_VAR='foo bar'
添加到qmake
調用。
執行此操作並刪除build-
文件夾以擺脫過時的Makefile.Debug
和Makefile.Release
文件后,我讓它正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.