2017-08-18 19 views
19

我們正在使用CMake,Qt和Visual Studio。我們的許多項目都配置爲通過傳遞AUTOMOC ONadd_library來運行automoc。CMake 3.9現在在Visual Studio中創建「autogen」項目?

我們最近更新到CMake 3.9.1,Visual Studio現在爲每個automoc'd庫顯示一個額外的項目。例如,我們現在在我們的解決方案中有一個「Core」項目和一個「Core_autogen」項目。

(這發生在兩個VS2015和VS2017,兩者的Qt 5.8和5.9.1)

這有一些惱人的後果:

  • 的項目幾乎多了一倍,增添了不少的視覺混亂。
  • 當通過UI構建單個項目時,Automoc不再運行,這會在調試特定項目的構建問題時導致微妙的錯誤。

有誰知道是否有辦法恢復以前的CMake行爲爲autogen?或者禁止這種方式,至少減少autogen項目的視覺混亂?

+0

也許'set_property(GLOBAL PROPERTY USE_FOLDERS ON)'會有幫助嗎? –

+0

在CMake gitlab中籤出[issue 17205](https://gitlab.kitware.com/cmake/cmake/issues/17205)。它報告這個問題的'_autogen'部分,並鏈接到一個預期解決它的合併請求(目前針對3.10.0版本)。 –

回答

9

根據CMake v3.9文檔,您可以使用AUTOGEN_BUILD_DIR將生成的文件移動到不同的文件夾。

默認情況下,CMake的使用<dir>/<target-name>_autogen其中:

<dir>CMAKE_CURRENT_BINARY_DIR<target-name>NAME

還是從AUTOMOC屬性,您可以使用:

全局屬性AUTOGEN_TARGETS_FOLDER能用於分組在IDE中一起自動瞄準,例如在MSVS中。

可以使用全局屬性AUTOGEN_SOURCE_GROUP將由AUTOMOC生成的文件組合在一起,例如在IDE中。在MSVS中。

希望這會有所幫助。

+1

感謝您的建議,但這並不完全有幫助。 AUTOGEN_TARGETS_FOLDER設置生成的文件(例如mocs_compilation.cpp)的存儲位置。無論如何CMake仍然會創建「_autogen」項目。在3.9之前,CMake將moc作爲項目預建步驟的一部分。現在它似乎爲每個automoc'd項目創建一個額外的項目。 –

6

此收集在一個文件夾中的所有項目AUTOGEN:

set_property(GLOBAL PROPERTY USE_FOLDERS ON) 
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER AutoMoc) 

enter image description here

相關問題