2015-02-23 20 views
2

我從來沒有使用過CMake,但我嘗試了一個不支持任何其他構建系統的IDE(CLion),所以我試了一下。我得到以下警告在每次構建的開始:如何禁用CMake 3.1中有關未定義cygwin WIN32的警告?

CMake的警告/cygdrive/c/Users/admin/.clion10/system/cygwin_cmake/share/cmake-3.1.2/Modules/Platform/ CYGWIN.cmake:15 (消息):CMake不再定義Cygwin上的WIN32!

(1)如果你只是試圖建立這個項目,忽略此 警告或通過在 環境或CMake的緩存設置CMAKE_LEGACY_CYGWIN_WIN32 = 0它安靜。如果稍後配置或生成 錯誤,則此項目可能已被寫入 ,假定Cygwin爲WIN32。在這種情況下,請改爲設置 CMAKE_LEGACY_CYGWIN_WIN32 = 1。

(2)如果你正在開發這個項目,添加行

set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required 

在頂層的CMakeLists.txt文件的頂部或CMake的最低要求 版本設置爲2.8.4或更高。然後教你的項目 建立在沒有WIN32的Cygwin上

我已經嘗試了兩種建議的解決方案。以下是我的CMakeLists.txt文件的前兩行:

cmake_minimum_required(VERSION 3.1) 
set(CMAKE_LEGACY_CYGWIN_WIN32 0) 

但我仍然收到警告。我如何擺脫它?

+0

執行'-Wno-dev'選項來取消這些警告:'cmake -Wno-dev/path/to/source' – fenix688 2015-02-23 22:05:47

+2

根據手冊,該選項旨在「壓制警告CMakeLists.txt文件「。作爲CMakeLists.txt文件的作者,我寧願不壓制對我有用的警告,特別是作爲環境的新手,他可能會犯錯誤...... – Jules 2015-02-23 23:03:39

回答

3

據尼爾斯Gladitz(是他對SO 2)CMake的郵件列表:

發出警告是通過運行代碼「項目()」。 由於在頂級CMakeLists.txt中沒有明確的project()調用,因此CMake會隱式添加一個。 [1]

項目文件規定的CMake> = 2.8.4應使警告消失後明確要求項目():

cmake_minimum_required(VERSION 2.8.8)

project(Foo)

而且似乎上班。

+0

只是使得這個工具如此令人頭疼的許多設計怪癖和陷阱之一。 – Nuzzolilo 2016-03-02 21:49:30

+0

同意。像其他許多工具一樣,它似乎是從一個好主意開始的,但在所有細節和特殊情況下都迷失了方向。構建工具似乎本質上很難保持簡單,並且仍然在做這項工作,'make'已經陷入了困境。有很多嘗試嘗試做什麼'cmake'嘗試但沒有吸引力的嘗試。 – thoni56 2016-03-03 07:00:17

1

set(CMAKE_LEGACY_CYGWIN_WIN32 0)移動到CMakeLists文件的頂部。它必須在cmake_minimum_required之前進行評估,以便在此情況下正常工作。

+0

對我來說,這看起來像一個錯誤,或者至少在CMake中有缺陷的邏輯。根據消息,你應該定義'set(CMAKE_LEGACY_CYGWIN_WIN32 0)#當需要CMake> = 2.8.4時刪除'。對我來說,評論表明,如果我設置了'cmake_minimum_required(VERSION 3.1)',則消息應該消失(因爲3.1> = 2.8.4)。然後,消息繼續明確指出「將CMake的最低版本設置爲2.8.4或更高」(我的大寫)。 – thoni56 2016-03-02 07:02:15

0

我的cmake文件用於Cygwin & Linux。所以對我來說最簡單的解決方法是編輯我的Cygwin的.bashrc並添加行

export CMAKE_LEGACY_CYGWIN_WIN32=0

現在我沒有離開Cygwin的特定語法在我的跨平臺cmake的文件。