URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8865
[ Назад ]

Исходное сообщение
"Получить CMAKE_INSTALL_PREFIX в коде"

Отправлено dimonna , 22-Сен-10 14:07 
Всем привет!

Как получить строку в коде C++ из опции cmake говорящей ему куда ставить пакет?

Например, если я запускаю:

cmake CMAKE_INSTALL_PREFIX=/tmp ..

потом

make

то во время компиляции хочется каким-то образом получить const char* path со значением которое я передал через CMAKE_INSTALL_PREFIX, т.е. "/tmp"


Спасибо заранее,
Дмитрий


Содержание

Сообщения в этом обсуждении
"как-то так"
Отправлено Вова , 22-Сен-10 15:00 
#define QUOTE(x) _QUOTE(x)

#define _QUOTE(x) #x

#cmakedefine CMAKE_INSTALL_PREFIX QUOTE(${CMAKE_INSTALL_PREFIX})


"как-то так"
Отправлено dimonna , 22-Сен-10 16:06 
>#define QUOTE(x) _QUOTE(x)
>
>#define _QUOTE(x) #x
>
>#cmakedefine CMAKE_INSTALL_PREFIX QUOTE(${CMAKE_INSTALL_PREFIX})

Не понял, это надо прописать в CMakeLists.txt и тогда соответствующий макрос будет передан при компиляции?

Мне ведь надо не

char* c = "CMAKE_INSTALL_PREFIX";

а

char* c = "/tmp"

если я делаю CMAKE_INSTALL_PREFIX=tmp


"как-то так"
Отправлено Вова , 22-Сен-10 16:30 
>>#define QUOTE(x) _QUOTE(x)
>>
>>#define _QUOTE(x) #x
>>
>>#cmakedefine CMAKE_INSTALL_PREFIX QUOTE(${CMAKE_INSTALL_PREFIX})
>
>Не понял, это надо прописать в CMakeLists.txt и тогда соответствующий макрос будет
>передан при компиляции?

нет, это всё в source.cc

в симейклисте:

include(CMakeMacroParseArguments)

configure_file(${CMAKE_SOURCE_DIR}/source.cc ${CMAKE_BINARY_DIR}/source.cc)

может быть, есть и более удобный вариант, я не фанат симейка, если что.


"как-то так"
Отправлено dimonna , 22-Сен-10 17:14 
>[оверквотинг удален]
>нет, это всё в source.cc
>
>в симейклисте:
>
>include(CMakeMacroParseArguments)
>
>configure_file(${CMAKE_SOURCE_DIR}/source.cc ${CMAKE_BINARY_DIR}/source.cc)
>
>может быть, есть и более удобный вариант, я не фанат симейка, если
>что.

Да, пожалуй придется заюзать таки config.h

Спасибо всем откликнувшимся!!!

Тема закрыта.
Дмитрий



"Получить CMAKE_INSTALL_PREFIX в коде"
Отправлено phpcoder , 22-Сен-10 15:37 
В Autotools это обычно решается с помощью config.h файла, который создаётся configure скриптом и в котором все подобные значения за-define-нены. Думаю, что и в CMake можно также поступить. Либо просто пробросить в приложение через опцию -D у компилятора.

(Другой вопрос, что по-хорошему приложению должно быть фиолетово куда его установили и подобные вопросы не должны возникать.)



"Получить CMAKE_INSTALL_PREFIX в коде"
Отправлено Вова , 22-Сен-10 16:01 
>(Другой вопрос, что по-хорошему приложению должно быть фиолетово куда его установили и
>подобные вопросы не должны возникать.)

gcc и qt - нехорошее приложение и плохой тулкит?


"Получить CMAKE_INSTALL_PREFIX в коде"
Отправлено аноним , 24-Сен-10 13:27 
ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")

возможно, нужно будет несколько слешей перед кавычками.

config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.


"Получить CMAKE_INSTALL_PREFIX в коде"
Отправлено dimonna , 24-Сен-10 19:39 
>ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
>
>возможно, нужно будет несколько слешей перед кавычками.
>
>config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.

А как потом его значение получить в виде строки в коде?


"Получить CMAKE_INSTALL_PREFIX в коде"
Отправлено phpcoder , 24-Сен-10 21:11 
>>ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
>>
>>возможно, нужно будет несколько слешей перед кавычками.
>>
>>config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.
>
>А как потом его значение получить в виде строки в коде?

const char * const prefix = CMAKE_INSTALL_PREFIX;



"Получить CMAKE_INSTALL_PREFIX в коде"
Отправлено dimonna , 24-Сен-10 21:21 
>>>ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
>>>
>>>возможно, нужно будет несколько слешей перед кавычками.
>>>
>>>config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.
>>
>>А как потом его значение получить в виде строки в коде?
>
>const char * const prefix = CMAKE_INSTALL_PREFIX;

Ага, и получите

const char* const prefix = /folder/folder;

вместе с ошибкой компиляции :)