/ / Защо `project ()` засяга мнението на CMake за `CMAKE_SIZEOF_VOID_P`? - измами, инсталирай

Защо "project ()" влияе върху мнението на CMake за "CMAKE_SIZEOF_VOID_P"? - измами, инсталирай

За моя CMake проект искам да изградя както 32-битова, така и 64-битова версия на библиотека и да ги инсталирам на правилното място, използвайки CMake.

Въпреки това, CMake не инсталира библиотеките на правилните места, въпреки че използвам GNUInstallDirs модул.

Проследих проблема до факта, че project() засяга размера на празнотата *, което изглежда много странно. (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() променя това и как мога да избегна това?

Отговори:

1 за отговор № 1

Обърнете се към project() инициализира повечето неща, свързани с компилатора. Преди това обаждане почти всяка CMake команда и дори променливите не работят както се очаква. CMake обаче не генерира грешка за това.

Документация за променлива CMAKE_SIZEOF_VOID_P изрично заявява, че неговата стойност е "определена чрез опита да се състави", така че да се провери преди project() разговорът е безполезен: компилаторът още не е зададен.

Правилното използване би било:

cmake_minimum_required(VERSION 3.7)
project() # Initialize compiler-related stuff
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()