私のCMakeプロジェクトでは、32ビット版と64ビット版の両方のライブラリをビルドし、CMakeを使って正しい場所にインストールしたいと思っています。なぜ `project()`が `CMAKE_SIZEOF_VOID_P`のCMakeの意見に影響しますか?
しかし、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(sigh)... – thoni56
*未定義の動作*へようこそ! :)私は同意します。コマンド前の 'project()'の動作は本当に**未定義です**。 – Tsyvarev
ここに重要な注意点があるようです。ドキュメントは 'CMAKE_SIZEOF_VOID_P'が" try compile "によって決定されると述べていますが、このコンパイルでは' CMAKE_C_FLAGS'は使われないようです。 "-m32"で試してください。それでも8(64ビット)と表示されます。これをUbuntuでCMake 3.5.2でテストしました。しかし、短いプログラムを持つ 'try_run'は' CMAKE_C_FLAGS'を使い、4を返します。 – thoni56