Makefile 调整g++;带premake的位置

Makefile 调整g++;带premake的位置,makefile,premake,Makefile,Premake,我想使用特定版本的g++installedvat/opt/blabla/bin/g++ 如何强制premake在makefile中添加CXX变量的初始化,使其指向特定位置 我确实意识到,一旦生成makefile,我就可以“makecxx=…”,但我希望在自动生成的makefile中设置CXX 使用premake5,瞄准gmake 提前谢谢 ============= 更新: 通过插入示例和浏览代码,我发现我可以通过将此代码添加到premake5.lua中来实现: local GCC_BIN_PA

我想使用特定版本的g++installedvat/opt/blabla/bin/g++

如何强制premake在makefile中添加CXX变量的初始化,使其指向特定位置

我确实意识到,一旦生成makefile,我就可以“makecxx=…”,但我希望在自动生成的makefile中设置CXX

使用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函数有意义吗?

我认为正式的方法是创建自己的工具集

下面的示例创建了一个名为“arm_gcc”的工具集:

然后您可以使用:

toolset "arm_gcc" 
在项目、过滤器等内部

此方法的优点是不会覆盖常规gcc工具集。如有必要,两者可以共存


在我的例子中,我发现cleaner可以将每个编译器添加到自己的lua文件中,然后从主(premake5.lua)脚本中包含它。

与上面的答案相同,但更通用。该文件可以命名为“add_new_gcc_toolset.lua”:


作为一种解决方法,我发现了以下方法:

makesettings [[
    CC = gcc
]]

您是否尝试过CXX=。。。普雷梅克?你是说setenv CXX=,然后运行premake?我现在试过了,但没有改变任何东西。我认为应该有一些设置添加到premake.lua文件中,类似于premake.tools.gcc.something=/opt/blablabla/bin/g++,但我没有弄清楚应该是什么。设置premake.tools.gcc.cxx和/或premake.tools.gcc.tools.cxx似乎没有任何影响。这必须在同一行。谢谢!我会试试的。有没有一种干净的方法可以将路径作为参数传递,这样我就可以重用同一个包来设置各种工具集?那太好了。我自己不是LUA专家,但看起来你可能不是堆栈溢出的普通用户,所以我按了一个新段落的介绍,忽略前面的消息。这将是一个更好的办法。我自己不是LUA专家,但看起来您可以像在这里通过函数那样轻松地将元素添加到“premake.tools”表中。您也可以将参数传递给“dofile”。我将该函数作为一个新的答案实现,它更加优雅,因此我也将开始在我的项目中使用它。
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
]]