對於我的CMake項目,我希望構建庫的32位和64位版本,並使用CMake將它們安裝在正確的位置。爲什麼`project()`影響CMake對`CMAKE_SIZEOF_VOID_P`的意見?
但是,即使我使用GNUInstallDirs
模塊,CMake也不會將庫安裝在正確的位置。
我跟蹤了這個問題,直到project()
影響void *的大小,這看起來很奇怪。 (GNUInstallDirs使用`CMAKE_SIZEOF_VOID_P)。
用下面的CMakeLists.txt:
cmake_minimum_required(VERSION 3.7)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
message (STATUS "CMake think we are compiling for 64-bit")
else()
message (STATUS "CMake think we are compiling for something not 64-bit")
endif()
結果是 「CMake的認爲我們正在編制的64位」。
但是如果我添加
project(x)
末,CMake的輸出「的CMake認爲我們編譯的東西不是64位」。
什麼project()
正在改變這一點,我該如何避免這種情況?
有趣的,雖然沒有'項目()'給出正確的答案,但把它晚給出錯誤的答案。 CMake(嘆氣)... – thoni56
歡迎來到*未定義的行爲*世界! :)我同意,在command-before-'project()'的情況下,行爲確實是** undefined **。 – Tsyvarev
這裏似乎有一個重要的警告。雖然文檔指出'CMAKE_SIZEOF_VOID_P'是由「try compile」確定的,但似乎這個編譯不使用'CMAKE_C_FLAGS'。嘗試使用「-m32」,它仍然會說8(對於64位)。使用CMake 3.5.2在Ubuntu上進行測試。但是一個帶有短程序的'try_run'將使用'CMAKE_C_FLAGS'並返回4。 – thoni56