我正在使用premake5作为项目生成器。我使用它来生成需要的makefile或Visual Studio(分别为Linux和Windows)。 我只想在我的C ++项目中使用gcc或clang(其他工具集不支持它)时才具有SAN(地址/行为不明确的SANitizer)配置。 遗憾的是我没有成功设置它。
我正在使用premake5 Alpha13。我在过滤器中尝试了not
,or
和and
的各种组合:
workspace "MyWorkspace"
configurations { "Debug", "DebugSAN", "Release" }
filter "toolset:not(gcc or clang)"
removeconfigurations "*SAN"
filter { "configurations:*SAN", "toolset:gcc or clang" }
buildoptions { "-fno-omit-frame-pointer" }
buildoptions { "-fsanitize=undefined,address" }
linkoptions { "-fsanitize=undefined,address" }
尝试过"toolset:not gcc and not clang"
,{"toolset:not gcc", "toolset:not clang"}
...
在具有默认GCC的Linux上生成时,我应该以3种配置结束,而在premake5.lua中强制toolset "msc"
时只有2种配置。但是在这两种情况下,我仍然得到相同的makefile。
$ make help
Usage: make [config=name] [target]
CONFIGURATIONS:
debug
debugsan <- Showing-up when it wants
release
答案 0 :(得分:1)
remove命令似乎适用于“项目配置”
https://github.com/premake/premake-core/wiki/Removing-Values
所以类似的事情似乎可行
project "Test"
kind "StaticLib"
filter {"toolset: not gcc or toolset: not clang"}
removeconfigurations "*SAN"
此项目中将没有* san配置。 但是我不认为有一种方法可以将其从“工作区”中删除,也就是您的make文件。