2010-11-09 3 views
0

В настоящее время у меня есть базовый файл Cmake, который устанавливает определенные библиотечные каталоги. Я бы хотел условно инициализировать на основе целевого генератора - в моем случае генератор определяет, какие базовые каталоги использовать (64-битный генератор визуальной студии и обычный генератор визуальной студии).CMAKE: Условно инициализация переменной кэша в зависимости от типа генератора

Мой CMakeLists файл выглядит следующим образом:

PROJECT(STAT_AUTH) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 

SET(BOOST_DIR "c:\\dev_32\\Boost" CACHE PATH "The Boost Directory Path") 
SET(PROTOBUF_DIR "c:\\dev_32\\Protobuf" CACHE PATH "The Protobuf directory Path") 
SET(OPENSSL_DIR "c:\\dev_32\\OpenSSL" CACHE PATH "The OpenSSL Directory Path" 

Как условно инициализирует переменные таким образом они получают набор для 64-битных версий, когда я произвожу на 64-битных генераторов. Значение по умолчанию должно отображаться в Cmake Gui/ccmake, прежде чем я выберу вариант «сгенерировать».

ответ

1

Для Windows следующий синтаксис уместна. CMAKE_CL_64 определяет компилятор x86_64.

if(MSVC) 
    if(CMAKE_CL_64) 
     SET(BOOST_DIR "c:\\dev_64\\Boost" CACHE PATH "The Boost Directory Path") 
     SET(PROTOBUF_DIR "c:\\dev_64\\Protobuf" CACHE PATH "The Protobuf directory Path") 
     SET(OPENSSL_DIR "c:\\dev_64\\OpenSSL" CACHE PATH "The OpenSSL Directory Path") 
     SET(DEPLOY_DIR "c:\\root_64" CACHE PATH "The Deploy Path for the components built") 
    else() 
     SET(BOOST_DIR "c:\\dev_32\\Boost" CACHE PATH "The Boost Directory Path") 
     SET(PROTOBUF_DIR "c:\\dev_32\\Protobuf" CACHE PATH "The Protobuf directory Path") 
     SET(OPENSSL_DIR "c:\\dev_32\\OpenSSL" CACHE PATH "The OpenSSL Directory Path") 
     SET(DEPLOY_DIR "c:\\root_32" CACHE PATH 
      "The Deploy Path for the components built") 
    endif() 
endif() 
+0

Это намного лучший способ сделать что-то. Благодарю. –

4

Try:

if(CMAKE_SIZEOF_VOID_P MATCHES 4) 
    SET(BOOST_DIR "c:\\dev_32\\Boost" CACHE PATH "The Boost Directory Path") 
    SET(PROTOBUF_DIR "c:\\dev_32\\Protobuf" CACHE PATH "The Protobuf directory Path") 
    SET(OPENSSL_DIR "c:\\dev_32\\OpenSSL" CACHE PATH "The OpenSSL Directory Path" 
else() 
    SET(BOOST_DIR "c:\\dev_64\\Boost" CACHE PATH "The Boost Directory Path") 
    SET(PROTOBUF_DIR "c:\\dev_64\\Protobuf" CACHE PATH "The Protobuf directory Path") 
    SET(OPENSSL_DIR "c:\\dev_64\\OpenSSL" CACHE PATH "The OpenSSL Directory Path" 
endif() 
+0

Спасибо, что я направляюсь домой сейчас. Но я попробую это сделать. Я пытался, если (0) или если (выключено), но, похоже, анализатор cmake не соблюдает условные обозначения. В идеале я хотел бы сделать что-то вроде (psuedocode): 'if (Generator is Visual studio - 64) //...// endif()'. Так или иначе, что такое CMAKE_SIZEOF_VOID_P? –

+1

'CMAKE_SIZEOF_VOID_P': http://cmake.org/cmake/help/cmake-2-8-docs.html#variable:CMAKE_SIZEOF_VOID_P. «Размер указателя void. Этот параметр установлен на размер указателя на машине и определяется попыткой компиляции. Если найден размер 64 бит, путь поиска библиотеки изменяется для поиска 64-битных библиотек первый." –

+1

Будьте осторожны с командами 'SET (... CACHE ...)': данные записываются только при первом запуске cmake. Вам нужно очистить кеш, если вы хотите снова проверить свои значения по умолчанию. – tibur

Смежные вопросы