从 Premake 构建中排除项目

Exclude project from build by Premake

我在解决方案中有两个项目。其中之一是调试库,它应该只在调试工作区配置中构建。在 VS 中,我可以在配置管理器中禁用 'Build' 复选框。

但我需要使用 Premake 5.0 完成此操作,它默认包含构建中的所有项目。 我尝试通过配置使用过滤器,但这对我不起作用。

solution "Workspace"

configurations 
{   
    "Debug",
    "Release"
}

project "Application"
    language "C++"
    kind "ConsoleApp"

    files
    {
        "../sources/**.hpp",
        "../sources/**.cpp",
    }

filter "configurations:Debug"   

project "DebugLib"
    language "C++"
    kind "StaticLib"

    files
    {
        "../sources/**.hpp",
        "../sources/**.cpp",
    }
    
filter {}

也许 this 方法适合我,但我没有找到如何使用解决方案配置来制作 if 条件。

如何使用 Premake 实现此行为?

我在这里假设,但你不应该只是 到这个工作区使用 configmap 来管理这个?

https://github.com/premake/premake-core/wiki/Configurations-and-Platforms

使用过滤器。

project "Application"
   configurations { "Release" }
   kind "ConsoleApp"
   targetdir "bin/%{cfg.buildcfg}"
    filter "configurations:Release"

如图所示https://github.com/premake/premake-core/wiki/kind

而且我很确定你可以使用 https://github.com/premake/premake-core/wiki/Build-Settings 获得适当的设置以控制所需的平台。

你也可以只使用 defines 关键字,基本上就可以了。

我已经深入研究项目 kind,发现 None 种类可以满足我的需要。

A configuration which is not included in the build. Useful for projects containing only web pages, header files, or support documentation.

我改了配置,把kind放到filter by configuration下面,问题解决了。不是这样的:

project "DebugLib"
    language "C++"
    
    filter "configurations:Release" 
        kind "None"
    filter "configurations:Debug"
        kind "StaticLib"
    filter {}

我看到你已经标记了一个可接受的解决方案,但我想我会把它留在这里,希望能帮助未来的搜索者。

我需要我的项目是一个实用项目,这样我仍然可以从项目中手动编译项目,如果项目类型更改为 'None'。

所以我最后添加了这个。

require('vstudio')

premake.api.register {
    name = "buildenabled",
    scope = "config",
    kind = "string",
    allowed = {
        "Default",
        "Off",
        "On"
    },
  }
  
-- \modules\vstudio\vs2005_solution.lua
premake.override(premake.vstudio.sln2005.elements, "projectConfigurationPlatforms", function(base, cfg, context)
    
    if context.prjCfg.buildenabled and context.prjCfg.buildenabled == "Off" then
        return {
            premake.vstudio.sln2005.activeCfg
        }
    else
        return base(cfg, context)
    end
  end)

然后在项目中您想要禁用刚刚添加的构建

buildenabled "Off"

禁用该项目。

它很粗糙,但可能会帮助其他人找到适合他们的解决方案。