簡體   English   中英

讓CMake明確選擇MSVC平台工具集

[英]Have CMake select MSVC platform toolset explicitly

嗨,我有一個問題,我有一個C ++項目,該項目使用select C ++ 11/14功能,這些功能最多只能在CTP_Nov2013編譯器工具集中提供,而對於MSVC編譯器而言。 我知道有一個非常類似的話題在這里 ,和最相關的答復是,該工具包不能從腳本修修補補,為最終用戶會想用它修補。

  1. 首先,我不同意工具集的選擇是最終用戶的特權(在開發中的庫中,這可能是指最終用戶的特權)。
  2. 其次,我要完成的唯一事情是CMake會檢測是否存在各種編譯器功能,如果缺少這些功能,並且平台是MSVC,則取決於MSVC的版本,CMake會嘗試將平台工具集更改為CTP版本。 我知道一個事實,VS 12將不再接受任何編譯器更新(至少在CTP中不這樣),因為從現在開始這是VS 13 Beta的特權,因此可以安全地假設MSVC_VER 1700(如果可以使用該腳本選擇與VS 12)工具集相對應的版本。
  3. 第三,手動更新生成的Visual Studio項目文件通常會導致項目文件失效。 如果源路徑包含unicode字符(在我的情況下是這樣做的),則cl.exe將無法找到它們,因此不必一一更改大約十二個目標的工具集是很麻煩的。 這是CMake的問題,與項目文件的字符編碼以及CMake寫入路徑的方式有關。 我對此無能為力。 項目文件必須已經准備就緒,我只需要按F7鍵即可。

我找到了一種方法來實現我想要的命令

set(CMAKE_GENERATOR_TOOLSET "CTP_Nov2013" CACHE STRING "Platform Toolset" FORCE) 
set(CMAKE_VS_PLATFORM_TOOLSET "CTP_Nov2013" CACHE STRING "Platform Toolset" FORCE)

但是,這樣做的問題是腳本需要運行兩次才能生效。 由於cmake命令行是使用以下命令調用的

cmake -G"Visual Studio 12 2013 Win64"

已經選擇了一個工具集,但是我立即希望覆蓋合並到所選生成器的x64配置中的工具集。 最終,用戶可以像通常一樣使用生成器規范從命令行中選擇32/64位版本,但是如果他/她安裝了CTP,我希望對“最終用戶”隱藏MSVC編譯器的功能。

我如何編寫腳本並從命令行調用它,使其對Visual Studio和NMake Makefiles生成器以及CMake的首次調用均起作用?

使用@Tanuki和set_target_properties的回復,您可以在目標中強制使用平台工具集

if (CMAKE_VS_PLATFORM_TOOLSET MATCHES "CTP_Nov2013")
  set_target_properties(${your_target}
  PROPERTIES
  PLATFORM_TOOLSET "${CMAKE_VS_PLATFORM_TOOLSET}")
endif()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM