在 Premake 中隐藏项目文件的公共父文件夹

Hide common parent folders of project files in Premake

我是 Premake 新手。我正在使用 Premake 4.4 beta 5,因为 Premake 5 有一些问题,它不能生成正确的 VS2010 解决方案(使用 2010 编译器生成 VS2012 解决方案),并且它在一个项目下编写时为所有项目设置 libdirs 和链接。

无论如何,我遇到的问题是我写了一个 Premake 脚本。一切正常,但有一个烦恼,它包含项目中包含的所有文件之间共有的多个父文件夹。所以你必须打开多个文件夹,只包含一个文件夹,在你开始之前。这是一张图片,以便您理解:premake_common_parent_folders

我在光盘上的文件夹结构如下所示:

这是我的预制文件:

_targetdir = '../bin/' .. _ACTION

local function ProjectCommon()
  targetdir( _targetdir .. '/' .. project().name )
  files {
    '../src/' .. project().name .. '/**.*',
  }
  includedirs {
    '../src/' .. project().name .. '/include',
  }
end

solution( 'Example' )
  location( _ACTION )
  configurations { "Release", "Debug" }

project( 'Test' )
  ProjectCommon()
  language( 'C++' )
  kind( 'ConsoleApp' )
  includedirs {
    '../src/StaticLib/include',
  }
  libdirs {
    _targetdir .. '/StaticLib',
  }
  links {
    solution().name,
  }

project( 'StaticLib' )
  ProjectCommon()
  targetname( solution().name )
  language( 'C++' )
  kind( 'StaticLib' )

我想知道是否有办法通过单个包含文件夹将实现文件直接放在项目下。隐藏所有项目文件(src 和 [项目名称])共有的父文件夹。

希望它看起来像这样:premake_no_common_parent_folders

理论上(未经测试,我好久没用Premake 4了)可以用virtual paths重写结构

vpaths {
   ["*"] = "../src/"
}

另一方面,Premake 5 会自动从路径顶部修剪其他空组,因此如果您升级则不需要这样做。

说到 Premake 5,我对你提到的任何一个错误都不熟悉;如果你还没有,你应该 open an issue。我愿意打赌 "setting libdirs and links for all projects when written under one project" 是您的项目脚本的问题,而不是 Premake 本身的问题,因为那将是一个非常基本的缺陷。