用premake调整g ++位置 [英] adjusting g++ location with premake

查看:162
本文介绍了用premake调整g ++位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用特定版本的g ++已安装vat/opt/blabla/bin/g ++.

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

我确实意识到,一旦生成了makefile,就可以"make CXX = ...",但是我想在自动生成的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"的工具集:

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)脚本中将其包括在内.

I would like to use a specific version of g++ installedvat /opt/blabla/bin/g++.

How do I force premake to add initialization of CXX variable in makefile, such that it will point to the specific location?

I do realize that once makefile is generated, I can to 'make CXX=...' but I would like to have CXX set inside auto-generated makefile.

Using premake5, targeting gmake.

Thanks in advance

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

Update:

By poking examples and browsing the code, I figured out I can do it by adding this code into 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

Is there a better way to achieve the same? In particular, does it make sense to redefine gettoolname function?

解决方案

I think that official way is to create your own toolset.

The example below creates a toolset with the "arm_gcc" name:

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

Then you can use:

toolset "arm_gcc" 

Inside your projects, filters, etc.

This method has the advantage that you aren't overwriting the regular gcc toolset. Both can coexist if necessary.

In my case I actually find cleaner to add each compiler in its own lua file and then include it from the main (premake5.lua) script.

这篇关于用premake调整g ++位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆