За моя 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()