Cmake: Expected "(", got unquoted argument with text

IDE, VCS и прочее

Модератор: Модераторы разделов

IMB
Сообщения: 2565
ОС: Debian

Cmake: Expected "(", got unquoted argument with text

Сообщение IMB »

Доброго дня!
Для генерации документации Doxygen-м "изобразил" следующую конструкцию:

Код: Выделить всё

if (BUILD_DOC)
    find_package(Doxygen)
    if (DOXYGEN_FOUND)
        function(build_html lang out ver src top ex)
            sed --expression="s:CHANGE_LANGUAGE:${lang}:" \
                --expression="s:CHANGE_HTML_OUTPUT:${out}:" \
                --expression="s:CHANGE_VERSION:${ver}:" \
                --expression="s:CHANGE_INPUT:${src}:" \
                --expression="s:CHANGE_OUTPUT:${top}:" \
                --expression="s:CHANGE_EXAMPLE:${ex}:" \
                doxygen/Doxyfile.in | ${DOXYGEN_EXECUTABLE} -
        endfunction(build_html)
        add_custom_target(doc_en
                buld_html English html_en 0.1.0 inc doc example
                COMMENT "Generate english documentation"
                VERBATIM)
    endif()
endif()

Вопрос - как решить проблему Parse error. Expected "(", got unquoted argument with text "--expression="s:CHANGE_LANGUAGE:${lang}:"".?
Спасибо.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение NickLion »

http://www.cmake.org/cmake/help/v2.8.9/cma...execute_process

Т.е. должно быть что-то вроде:

Код: Выделить всё

 execute_process(COMMAND sed ...)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение drBatty »

IMB писал(а):
14.09.2012 19:22
Parse error. Expected "(", got unquoted argument with text "--expression="s:CHANGE_LANGUAGE:${lang}:"".?

тут --expression не нужно. Можно просто

Код: Выделить всё

sed "s:CHANGE_LANGUAGE:${lang}:;s:CHANGE_HTML_OUTPUT:${out}:;s:CHANGE_VERSION:${ver}:;s:CHANGE_INPUT:${src}:;s:CHANGE_OUTPUT:${top}:;s:CHANGE_EXAMPLE:${ex}:"

естественно я согласен с замечанием NickLion
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение IMB »

Хм, не выходит каменный цветок.

Код: Выделить всё

 add_custom_target(doc_en
            execute_process(COMMAND sed
                "s:CHANGE_LANGUAGE:English:;s:CHANGE_HTML_OUTPUT:html_en:;s:CHANGE_VERSION:0.1.0:;s:CHANGE_INPUT:inc:;s:CHANGE_OUTPUT:doc:;s:CHANGE_EXAMPLE:example:"
                doxygen/Doxyfile.in | ${DOXYGEN_EXECUTABLE} -)
            COMMENT "Generate english documentation"
            VERBATIM)

При запуске следующее:

Код: Выделить всё

$ make doc_en
Scanning dependencies of target doc_en
[  0%] Generate english documentation
/bin/sh: execute_process: command not found
make[3]: *** [CMakeFiles/doc_en] Error 127
make[2]: *** [CMakeFiles/doc_en.dir/all] Error 2
make[1]: *** [CMakeFiles/doc_en.dir/rule] Error 2
make: *** [doc_en] Error 2

Если это важно, то у меня cmake version 2.8.2 и потенциально могу обновить до 2.8.7.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение NickLion »

А почему execute_process уже переместилось внутрь add_custom_target?
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение IMB »

Код: Выделить всё

function(build_html lang out ver src top ex)
    execute_process(COMMAND
    sed "s:CHANGE_LANGUAGE:${lang}:;s:CHANGE_HTML_OUTPUT:${out}:;s:CHANGE_VERSION:${ver}:;s:CHANGE_INPUT:${src}:;s:CHANGE_OUTPUT:${top}:;s:CHANGE_EXAMPLE:${ex}:"
    doxygen/Doxyfile.in | ${DOXYGEN_EXECUTABLE} -)
endfunction(build_html)
add_custom_target(doc_en
    build_html English html_en 0.1.0 inc doc example
    COMMENT "Generate english documentation"
    VERBATIM)

Код: Выделить всё

$ make doc_en
Scanning dependencies of target doc_en
[  0%] Generate english documentation
make[3]: build_html: Command not found
make[3]: *** [CMakeFiles/doc_en] Error 127
make[2]: *** [CMakeFiles/doc_en.dir/all] Error 2
make[1]: *** [CMakeFiles/doc_en.dir/rule] Error 2
make: *** [doc_en] Error 2
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение NickLion »

Код: Выделить всё

add_custom_target(doc_en
    build_html(English...)
    ...)

По идее…
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение IMB »

Код: Выделить всё

 function(build_html lang out ver src top ex)
    execute_process(COMMAND
            sed
            "s:CHANGE_LANGUAGE:${lang}:;s:CHANGE_HTML_OUTPUT:${out}:;s:CHANGE_VERSION:${ver}:;s:CHANGE_INPUT:${src}:;s:CHANGE_OUTPUT:${top}:;s:CHANGE_EXAMPLE:${ex}:"
                doxygen/Doxyfile.in | ${DOXYGEN_EXECUTABLE} -)
endfunction(build_html)
add_custom_target(doc_en
    build_html(English html_en 0.1.0 inc doc example)
    COMMENT "Generate english documentation"
    VERBATIM)

Код: Выделить всё

$ make doc_en
Scanning dependencies of target doc_en
[  0%] Generate english documentation
/bin/sh: build_html: command not found
make[3]: *** [CMakeFiles/doc_en] Error 127
make[2]: *** [CMakeFiles/doc_en.dir/all] Error 2
make[1]: *** [CMakeFiles/doc_en.dir/rule] Error 2
make: *** [doc_en] Error 2
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение Crazy »

Я бы вместо sed использовал бы configure_file

вроде как должно получиться

Код: Выделить всё

set(GEN_FILE doxygen/Doxyfile_${lang}.in )

add_custom_command(OUTPUT ${GEN_FILE}
    COMMAND sed "s:CHANGE_LANGUAGE:${lang}:;s:CHANGE_HTML_OUTPUT:${out}:;s:CHANGE_VERSION:${ver}:;s:CHANGE_INPUT:${src}:;s:CHANGE_OUTPUT:${top}:;s:CHANGE_EXAMPLE:${ex}:"  >  ${GEN_FILE}
)

ADD_CUSTOM_TARGET(doc
    COMMAND   ${DOXYGEN_EXECUTABLE} ${GEN_FILE}
    DEPENDS     ${GEN_FILE}
)


Desipere in loco
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение IMB »

В вашем варианте тоже используется sed для генерации файла.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение Crazy »

В случае с sed, тот будет вызываться каждый раз при make doc, а при configure_file гарантировано при вызове cmake.
А будет ли каждый раз генериться(если добавить в DEPENDS/SOURCE) при вызове make не знаю.

Desipere in loco
Спасибо сказали:
IMB
Сообщения: 2565
ОС: Debian

Re: Cmake: Expected "(", got unquoted argument with text

Сообщение IMB »

Сделал так:

Код: Выделить всё

if (BUILD_DOC)
    find_package(Doxygen)
    if (DOXYGEN_FOUND)
        message(STATUS "Building documentation")
        execute_process(COMMAND sed "s:CHANGE_LANGUAGE:English:;s:CHANGE_HTML_OUTPUT:html_en:;s:CHANGE_VERSION:${librtnl_VERSION}:;s:CHANGE_INPUT:${PROJECT_SOURCE_DIR}/inc:;s:CHANGE_OUTPUT:${PROJECT_SOURCE_DIR}/doc:;s:CHANGE_EXAMPLE:${PROJECT_SOURCE_DIR}/example:" Doxyfile.in
            COMMAND ${DOXYGEN_EXECUTABLE} -
            WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/doxygen)
        execute_process(COMMAND sed "s:CHANGE_LANGUAGE:Russian:;s:CHANGE_HTML_OUTPUT:html_ru:;s:CHANGE_VERSION:${librtnl_VERSION}:;s:CHANGE_INPUT:${PROJECT_SOURCE_DIR}/inc:;s:CHANGE_OUTPUT:${PROJECT_SOURCE_DIR}/doc:;s:CHANGE_EXAMPLE:${PROJECT_SOURCE_DIR}/example:" Doxyfile.in
            COMMAND ${DOXYGEN_EXECUTABLE} -
            WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/doxygen)
    endif()
endif()

Теперь бы ещё параметры sed-а отфориатировать до приемелемой длины строки, а то дюже длинная строчка.
Спасибо сказали: