Как использовать 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
затем очищает его по умолчанию.
Все это работает. Однако есть ли лучшее решение?