我被困在向Visual Studio C++項目添加清單的問題中。情況是我們在Release和Debug中有兩個不同的清單描述。當我們將構建系統更改爲CMake時,我需要將它們包含在配置中。適用於Visual Studio的條件清單文件
目前我有一個版本:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='DeliveredComponent' version='1.0.0.0' processorArchitecture='amd64' />
</dependentAssembly>
</dependency>
</assembly>
而對於調試:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='DeliveredComponent.Debug' version='1.0.0.0' processorArchitecture='amd64' />
</dependentAssembly>
</dependency>
</assembly>
只是不要問爲什麼調試組件與的.debug後綴。我無法改變它。
目前我加入清單有:
add_custom_command(
TARGET MyExeFile
POST_BUILD
COMMAND "mt.exe" -manifest \"${CMAKE_CURRENT_SOURCE_DIR}\\MyExeFile.$(Configuration).x64.manifest\" -outputresource:\"$<TARGET_FILE:${targetname}>\;1\"
COMMENT "Adding manifest..."
)
這棄用CMake的3.4開始,另外此生成後步驟確實改變了,這意味着重新鏈接可執行後輸出文件( Visual Studio依賴關係檢查)。
這就是爲什麼我現在要將* .manifest添加到add_executable命令(自3.4開始支持)。但是我怎樣才能切換清單?
是否有任何可能(使用生成器表達式或類似方法)選擇要在項目中編譯的兩個文件之一? (僅限DEBUG或RELEASE)。或者我可以在兩個路徑之間的清單內部切換?類似於
<dependentAssembly configuration='Debug'>
...
</dependentAssembly>
Pär,這的確如此,但是當Relesae和Debug不同時CMake無法生成Visual Studio項目。 – roalter
無可否認,我沒有測試這個例子,所以可能是這樣,我以前做過類似的事情,但看起來我可能會誤解 – Paxxi
另一種方法是在'add_executable()'的源列表中使用生成器表達式,即'$ <$:app.debug.manifest>'和'$ <$ >:app.manifest>',因爲這對於所有CMake生成器類型而不是依靠計算'DEBUG'變量。 –