Используя CMake для генерации Visual Studio файлы проекта C++

Ошибка синтаксиса: ошибка синтаксиса, неожиданный T_ENCAPSED_AND_WHITESPACE

Эта ошибка чаще всего встречается при попытке ссылаться на значение массива с помощью ключевого слова для интерполяции внутри строки с двумя кавычками , когда вся конструкция комплексной переменной не заключена в {}.

Случай ошибки:

Это приведет к Unexpected T_ENCAPSED_AND_WHITESPACE:

echo "This is a double-quoted string with a quoted array key in $array['key']";
//---------------------------------------------------------------------^^^^^

Возможные исправления:

В строке с двойными кавычками PHP разрешает использовать строки ключей ключей без кавычек и не выдаст E_NOTICE. Таким образом, вышесказанное может быть записано как:

echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^

Вся сложная переменная массива и ключ (ы) могут быть заключены в {}, и в этом случае они должны быть указаны чтобы избежать E_NOTICE. Документация PHP рекомендует этот синтаксис для сложных переменных.

echo "This is a double-quoted string with a quoted array key in {$array['key']}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array['key']}";

Конечно, альтернатива любой из вышеперечисленного заключается в объединении переменной массива in вместо интерполировать его:

echo "This is a double-quoted string with an array variable " . $array['key'] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^

Для справки см. раздел «Переменная синтаксический анализ» в странице руководства PHP Strings

86
задан Peter Mortensen 22 May 2017 в 00:00
поделиться

3 ответа

CMake на самом деле довольно хорош для этого. Ключевая роль была, все на стороне Windows должны не забыть выполнять CMake прежде, чем загрузиться в решении, и все на нашей стороне Mac должны были бы не забыть выполнять его, прежде чем сделают.

самая твердая часть была как разработчик Windows, удостоверяющийся, что Ваши структурные изменения были в файле cmakelist.txt а не в решении или файлах проекта, поскольку те изменения, вероятно, потеряются и даже если не потерянный не передать стороне Mac, которой также были нужны они, и парни Mac должны будут не забыть не изменять make-файл по тем же причинам.

просто требуется немного мысли и терпения, но сначала будут ошибки. Но если Вы будете использовать непрерывная интеграция с обеих сторон тогда, то они доберутся, вытряхнул рано, и люди в конечном счете войдут в привычку.

55
ответ дан Peter Mortensen 24 November 2019 в 08:03
поделиться

Мы переместили цепочку сборки нашего отдела в CMake, и у нас было несколько внутренних roadbumps начиная с других отделов где использование наших файлов проекта и, где приучено только к импорту их в их решения. У нас также были некоторые жалобы на CMake, не полностью интегрируемый в проект/администратора решения Visual Studio, таким образом, файлы должны были быть добавлены вручную к CMakeLists.txt; это было основным перерывом в людях рабочего процесса, привыкли к.

, Но в целом, это был довольно плавный переход. Мы очень счастливы, так как мы не должны больше иметь дело с файлами проекта.

конкретный рабочий процесс для добавления нового файла к проекту действительно прост:

  1. Создают файл, удостоверьтесь, что это находится в корректном месте.
  2. Добавляют файл к CMakeLists.txt.
  3. Сборка.

CMake 2.6 автоматически повторно выполняет себя, если какие-либо файлы CMakeLists.txt изменились (и (полу-) автоматически перезагружает решение/проекты).

Помнят, что при выполнении сборок из источника необходимо бояться создавать исходный файл в каталоге сборки (так как Visual Studio только знает о каталоге сборки).

25
ответ дан JesperE 24 November 2019 в 08:03
поделиться

Как Alex говорит, это работает очень хорошо. Единственная хитрая часть должна не забыть вносить любые изменения в cmake файлах, а не из Visual Studio. Таким образом на всех платформах, рабочий процесс подобен тому, если Вы использовали простые make-файлы.

, Но довольно легко работать с, и у меня не было проблем с cmake генерация недопустимых файлов или чего-либо как этот, таким образом, я не волновался бы слишком много.

9
ответ дан jalf 24 November 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: