从 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"
禁用该项目。
它很粗糙,但可能会帮助其他人找到适合他们的解决方案。
我在解决方案中有两个项目。其中之一是调试库,它应该只在调试工作区配置中构建。在 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"
禁用该项目。
它很粗糙,但可能会帮助其他人找到适合他们的解决方案。