0

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

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

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

  • 建造
    • premake4.lua
    • premake4.4-beta5.exe
  • 源代码
    • 静态库
      • 包括
        • 例子.h
      • 例子.cpp
    • 测试
      • 例子.cpp

这是我的预制:

_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

4

1 回答 1

1

理论上(未经测试,我很长时间没有使用 Premake 4)您可以使用虚拟路径来重写结构。

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

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

说到 Premake 5,我对你提到的任何一个 bug 都不熟悉;如果你还没有打开一个问题,你应该打开一个问题。我愿意打赌“在一个项目下编写时为所有项目设置 libdirs 和链接”是您的项目脚本而不是 Premake 本身的问题,因为这将是一个非常基本的缺陷。

于 2015-10-20T18:08:53.990 回答