Всем привет!Как получить строку в коде C++ из опции cmake говорящей ему куда ставить пакет?
Например, если я запускаю:
cmake CMAKE_INSTALL_PREFIX=/tmp ..
потом
make
то во время компиляции хочется каким-то образом получить const char* path со значением которое я передал через CMAKE_INSTALL_PREFIX, т.е. "/tmp"
Спасибо заранее,
Дмитрий
#define QUOTE(x) _QUOTE(x)#define _QUOTE(x) #x
#cmakedefine CMAKE_INSTALL_PREFIX QUOTE(${CMAKE_INSTALL_PREFIX})
>#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
>>#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)
может быть, есть и более удобный вариант, я не фанат симейка, если что.
>[оверквотинг удален]
>нет, это всё в source.cc
>
>в симейклисте:
>
>include(CMakeMacroParseArguments)
>
>configure_file(${CMAKE_SOURCE_DIR}/source.cc ${CMAKE_BINARY_DIR}/source.cc)
>
>может быть, есть и более удобный вариант, я не фанат симейка, если
>что.Да, пожалуй придется заюзать таки config.h
Спасибо всем откликнувшимся!!!
Тема закрыта.
Дмитрий
В Autotools это обычно решается с помощью config.h файла, который создаётся configure скриптом и в котором все подобные значения за-define-нены. Думаю, что и в CMake можно также поступить. Либо просто пробросить в приложение через опцию -D у компилятора.(Другой вопрос, что по-хорошему приложению должно быть фиолетово куда его установили и подобные вопросы не должны возникать.)
>(Другой вопрос, что по-хорошему приложению должно быть фиолетово куда его установили и
>подобные вопросы не должны возникать.)gcc и qt - нехорошее приложение и плохой тулкит?
ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")возможно, нужно будет несколько слешей перед кавычками.
config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.
>ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
>
>возможно, нужно будет несколько слешей перед кавычками.
>
>config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.А как потом его значение получить в виде строки в коде?
>>ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
>>
>>возможно, нужно будет несколько слешей перед кавычками.
>>
>>config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.
>
>А как потом его значение получить в виде строки в коде?const char * const prefix = CMAKE_INSTALL_PREFIX;
>>>ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
>>>
>>>возможно, нужно будет несколько слешей перед кавычками.
>>>
>>>config.h для одной строки - оверкилл, не уподобляйтесь autocrap'у.
>>
>>А как потом его значение получить в виде строки в коде?
>
>const char * const prefix = CMAKE_INSTALL_PREFIX;Ага, и получите
const char* const prefix = /folder/folder;
вместе с ошибкой компиляции :)