По моему мнению, важно иметь еще один слой (ViewModel) поверх уровня модели для сложных приложений, выполняющих большую часть операций CRUD, поскольку имеет следующие преимущества:
Обновление для CMake 3.0 и новее:
продолжение строки возможно с \
. см. cmake-3.0-doc
message("\
This is the first line of a quoted argument. \
In fact it is the only line but since it is long \
the source code uses line continuation.\
")
Debian Wheezy (2013): 2.8.9 Debian Wheezy-backports: 2.8 .11 Debian Jessy (2015): 3.0.2 Ubuntu 14.04 (LTS): 2.8.12 Ubuntu 15.04: 3.0.2 Mac OSX: cmake-3 доступен через Homebrew , Macports и Fink Windows: cmake-3 доступен через Chocolatey
Невозможно разбить строковый литерал на несколько строк в файлах CMakeLists.txt или в сценариях CMake. Если вы включаете новую строку в строку, в самой строке будет буквальная новая строка.
# Don't do this, it won't work, MYPROJ_VERSION will contain newline characters:
set(MYPROJ_VERSION "${VERSION_MAJOR}.
${VERSION_MINOR}.${VERSION_PATCH}-
${VERSION_EXTRA}")
Однако CMake использует пробелы для разделения аргументов, поэтому вы можете изменить пространство, разделяющее аргумент, на (/ g1)
Вы можете перефразировать эту более длинную строку:
set(MYPROJ_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}")
в качестве этих двух более коротких строк:
set(MYPROJ_VERSION
"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}")
Они полностью эквивалентны.
Используйте команду string(CONCAT)
:
set(MYPROJ_VERSION_MAJOR "1")
set(MYPROJ_VERSION_MINOR "0")
set(MYPROJ_VERSION_PATCH "0")
set(MYPROJ_VERSION_EXTRA "rc1")
string(CONCAT MYPROJ_VERSION "${MYPROJ_VERSION_MAJOR}"
".${MYPROJ_VERSION_MINOR}"
".${MYPROJ_VERSION_PATCH}"
"-${MYPROJ_VERSION_EXTRA}")
Хотя CMake 3.0 и более новая поддержка продолжение строки цитируемых аргументов вы не можете отступать от второй или последующих строк, не получая пропущенных отступов в вашей строке.
Вы можете использовать список. Каждый элемент списка может быть помещен в новую строку:
set(MYPROJ_VERSION_MAJOR "1")
set(MYPROJ_VERSION_MINOR "0")
set(MYPROJ_VERSION_PATCH "0")
set(MYPROJ_VERSION_EXTRA "rc1")
set(MYPROJ_VERSION_LIST "${MYPROJ_VERSION_MAJOR}"
".${MYPROJ_VERSION_MINOR}"
".${MYPROJ_VERSION_PATCH}"
"-${MYPROJ_VERSION_EXTRA}")
Список, используемый без кавычек, конкатенируется без пробела:
message(STATUS "Version: " ${MYPROJ_VERSION_LIST})
-- Version: 1.0.0-rc1
Если вам действительно нужно string, вы можете сначала преобразовать список в строку:
string(REPLACE ";" "" MYPROJ_VERSION "${MYPROJ_VERSION_LIST}")
message(STATUS "Version: ${MYPROJ_VERSION}")
-- Version: 1.0.0-rc1
Любая точка с запятой в исходных строках будет рассматриваться как разделители элементов списка и удалена. Они должны быть экранированы:
set(MY_LIST "Hello World "
"with a \;semicolon")
Это все еще немного многословно, но если ограничение 80 символов действительно вас задевает, вы можете многократно присоединяться к одной и той же переменной:
set(MYPROJ_VERSION_MAJOR "1")
set(MYPROJ_VERSION_MINOR "0")
set(MYPROJ_VERSION_PATCH "0")
set(MYPROJ_VERSION_EXTRA "rc1")
set(MYPROJ_VERSION "${MYPROJ_VERSION_MAJOR}.")
set(MYPROJ_VERSION "${MYPROJ_VERSION}${MYPROJ_VERSION_MINOR}.")
set(MYPROJ_VERSION "${MYPROJ_VERSION}${MYPROJ_VERSION_PATCH}-")
set(MYPROJ_VERSION "${MYPROJ_VERSION}${MYPROJ_VERSION_EXTRA}")
message(STATUS "version: ${MYPROJ_VERSION}")
Дает вывод:
$ cmake ~/project/tmp
-- version: 1.0.0-rc1
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rsanderson/build/temp