Как использовать premake для определения компиляции C++11?

Я пытался использовать "C++11" premake флаг, чтобы заставить компилятор GNU C++ выполнить компиляцию C++11.

Однако этот флаг не распознается, и я получаю сообщение "Недопустимый флаг".

Утверждение, которое я использовал в premake Скрипт lua следующий на уровне проекта или конфигурации:

flags {"C++11"}

я использую premake4 в Windows 10 через MSYS, Версия g ++ 4.8.1 и поддерживает C++11. (Когда я использую make напрямую, я передаю флаг компилятора C++11 компилятору, и он работает.)

Как я могу приступить к получению компиляции C++11, используя premake?

1 ответ

Для сборки Windows вам не нужно ничего указывать, так как версия vs подразумевает поддержку требуемого стандарта, поэтому premake5.exe vs2012 или позже достаточно.

Для Linux или MacOS использовать

buildoptions "-std=c++11"

Ну, я попробовал несколько вещей, и у меня есть решение. Оно работает.

1) Сначала с premake4, flags {"C++11"} заявление не работает Я имею в виду, на premake4, C++11 флаг не распознан. Обратите внимание, что flags Заявление само по себе действует на premake4 но (по-видимому) не C++11 флаг.

2) Вкл premake5, flags Само заявление было объявлено устаревшим. Так что вы не можете использовать flags {"C++11"} на premake5, Вместо этого используйте cppdialect "C++11" заявление. Я использовал это в configuration блоки.

3) Теперь вы можете выполнить инструкцию для создания makefiles с помощью premake5, Например:

premake5 --file=premake-lua-scriptname.lua gmake

4) Позже, когда вы запустите сгенерированный makefiles, вы найдете бинарный файл, созданный по умолчанию, в bin Подкаталог, подчиненный директории, содержащей скрипт lua premake5. Возьмите мое предложение и переопределите это значение по умолчанию, чтобы оно было создано в том же каталоге, что и скрипт lua. (Я объясню почему ниже.) Вы переопределяете это значение по умолчанию, используя targetdir функция, которая может быть выдана на уровне проекта. Например:

targetdir "."

5) Обратите внимание, что текущая (alpha12) версия premake5 не поддерживает clean действие. Для вызова clean действие, вам придется использовать premake4, Вот почему я предложил создать бинарный файл в директории по умолчанию. premake4 затем очищает его по умолчанию.

Все это работает. Однако есть ли лучшее решение?

Другие вопросы по тегам