Настройка местоположения g++ с помощью premake

Я хотел бы использовать конкретную версию g++, установленную vat /opt/blabla/bin/g++.

Как заставить premake добавить инициализацию переменной CXX в make-файле, чтобы она указывала на конкретное местоположение?

Я понимаю, что после генерации make-файла я могу "сделать CXX=...", но я бы хотел, чтобы CXX был установлен внутри автоматически сгенерированного make-файла.

Использование premake5, нацеливание на gmake.

заранее спасибо

=============

Обновить:

Посматривая примеры и просматривая код, я понял, что могу сделать это, добавив этот код в premake5.lua:

local GCC_BIN_PATH = "/opt/blala/bin"

-- start: setting gcc version
-- todo: consider moving this instrumentation into a side lua script
local gcc = premake.tools.gcc

gcc.tools = {
   cc = GCC_BIN_PATH.."/gcc",
   cxx = GCC_BIN_PATH.."/g++",
   ar = GCC_BIN_PATH.."/ar"
}

function gcc.gettoolname(cfg, tool)
   return gcc.tools[tool]
end
-- finish: setting gcc version

Есть ли лучший способ добиться того же? В частности, имеет ли смысл переопределять функцию gettoolname?

2 ответа

Решение

Я думаю, что официальный способ - создать свой собственный набор инструментов.

В приведенном ниже примере создается набор инструментов с именем arm_gcc:

premake.tools.arm_gcc         = {}

local arm_gcc                 = premake.tools.arm_gcc
local gcc                     = premake.tools.gcc

arm_gcc.getcflags             = gcc.getcflags
arm_gcc.getcxxflags           = gcc.getcxxflags
arm_gcc.getforceincludes      = gcc.getforceincludes
arm_gcc.getldflags            = gcc.getldflags
arm_gcc.getcppflags           = gcc.getcppflags
arm_gcc.getdefines            = gcc.getdefines
arm_gcc.getincludedirs        = gcc.getincludedirs
arm_gcc.getLibraryDirectories = gcc.getLibraryDirectories
arm_gcc.getlinks              = gcc.getlinks
arm_gcc.getmakesettings       = gcc.getmakesettings

function arm_gcc.gettoolname (cfg, tool)  
  local prefix = path.getabsolute ("../../arm_env")
  prefix       =  prefix .. "/arm_toolchain/bin/arm-linux-gnueabihf-"
  if     tool == "cc" then
    name = prefix .. "gcc"  
  elseif tool == "cxx" then
    name = prefix .. "g++"
  elseif tool == "ar" then
    name = prefix .. "ar"
  else
    name = nil
  end
  return name
end

Тогда вы можете использовать:

toolset "arm_gcc" 

Внутри ваших проектов, фильтров и т. Д.

Этот метод имеет то преимущество, что вы не перезаписываете обычный набор инструментов gcc. Оба могут сосуществовать в случае необходимости.

В моем случае я нахожу более чистым, чтобы добавить каждый компилятор в свой собственный файл lua, а затем включить его из основного (premake5.lua) скрипта.

Тот же ответ, что и выше, но более общий. Этот файл может называться "add_new_gcc_toolset.lua":

local function add_new_gcc_toolset (name, prefix)
  local gcc                         = premake.tools.gcc
  local new_toolset                 = {}  
  new_toolset.getcflags             = gcc.getcflags
  new_toolset.getcxxflags           = gcc.getcxxflags
  new_toolset.getforceincludes      = gcc.getforceincludes
  new_toolset.getldflags            = gcc.getldflags
  new_toolset.getcppflags           = gcc.getcppflags
  new_toolset.getdefines            = gcc.getdefines
  new_toolset.getincludedirs        = gcc.getincludedirs
  new_toolset.getLibraryDirectories = gcc.getLibraryDirectories
  new_toolset.getlinks              = gcc.getlinks
  new_toolset.getmakesettings       = gcc.getmakesettings
  new_toolset.toolset_prefix        = prefix

  function new_toolset.gettoolname (cfg, tool)  
    if     tool == "cc" then
      name = new_toolset.toolset_prefix .. "gcc"  
    elseif tool == "cxx" then
      name = new_toolset.toolset_prefix .. "g++"
    elseif tool == "ar" then
      name = new_toolset.toolset_prefix .. "ar"
    end
    return name
  end  

  premake.tools[name] = new_toolset
end

return add_new_gcc_toolset

В качестве обходного пути я нашел этот метод:

makesettings [[
    CC = gcc
]]

https://github.com/premake/premake-core/wiki/makesettings

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