Premake工具链¶
警告
此功能是实验性的,可能会有重大更改。请参阅 Conan 稳定性 部分以获取更多信息。
重要
此类将生成仅与 Premake 版本 ≥ 5.0.0 兼容的文件
PremakeToolchain
生成器可以在 conanfile 中按名称使用
class Pkg(ConanFile):
generators = "PremakeToolchain"
[generators]
PremakeToolchain
它也可以在 conanfile 的 generate()
方法中完全实例化
使用示例
from conan.tools.premake import PremakeToolchain
class Pkg(ConanFile):
settings = "os", "compiler", "build_type", "arch"
def generate(self):
tc = PremakeToolchain(self)
tc.extra_defines = ["VALUE=2"] # Add define to main premake workspace
tc.extra_cflags = ["-Wextra"] # Add cflags to main premake workspace
tc.extra_cxxflags = ["-Wall", "-Wextra"] # Add cxxflags to main premake workspace
tc.extra_ldflags = ["-lm"] # Add ldflags to main premake workspace
tc.project("main").extra_defines = ["TEST=False"] # Add define to "main" project (overriding possible value)
tc.project("main").extra_cxxflags = ["-FS"] # Add cxxflags to "main" project
tc.project("test").disable = True # A way of disabling "test" project compilation
tc.project("foo").kind = "StaticLib" # Override library type of "foo"
tc.generate()
生成的文件¶
在执行 conan install 命令(或在缓存中构建包时)之后,PremakeToolchain
会生成 conantoolchain.premake5.lua
文件,其中包含在 generate()
方法中提供的信息,以及从当前 settings
、conf
等转换的信息。
Premake 没有暴露任何 API 来交互、注入或修改构建脚本。此外,Premake 没有工具链的概念,因此按照 Premake 维护者的说明(参见 Premake 讨论),由于 Premake 是基于 Lua 脚本构建的,Conan 生成的文件是一个 Lua 脚本,它将覆盖原始 Premake 脚本并添加以下信息:
从 Conan 设置中检测
buildtype
。根据需要定义 C++ 标准。
根据需要定义 C 标准。
根据 Conan 配置和操作系统检测 Premake
action
。定义构建文件夹,以避免 Premake 在源仓库中创建构建文件夹和对象文件的默认行为(这与 Conan 的最佳实践相悖)。
根据用户配置值定义编译器和链接器标志以及宏定义。
交叉构建时定义正确的目标架构。
根据 Conan 选项定义
fPIC
标志。根据
shared
Conan 选项,PremakeToolchain
会将workspace
的kind
设置为SharedLib
或StaticLib
。
注意
如果项目已定义了 kind
属性(典型情况),PremakeToolchain
则无法覆盖该项目的 kind
。它只能覆盖顶层 workspace.kind
,这只会影响未定义 kind
的项目。
建议:由于 Premake 没有提供像 CMake 的 BUILD_SHARED_LIBS 那样外部管理库创建类型(共享库或静态库)的机制,因此在使用 Conan 时,建议避免在库项目中定义 kind
属性。
参考¶
- class PremakeToolchain(conanfile)¶
PremakeToolchain 生成器
- 参数:
conanfile –
< ConanFile object >
当前配方对象。始终使用self
。
- extra_cxxflags¶
额外的
CXX
标志列表。添加到buildoptions
。
- extra_cflags¶
额外的
C
标志列表。添加到buildoptions
。
- extra_ldflags¶
额外的链接器标志列表。添加到
linkoptions
。
- extra_defines¶
额外的预处理器宏定义列表。添加到
defines
。
- project(project_name)¶
返回的对象将具有与工作区相同的属性,但仅影响具有指定名称的项目。:param project_name: 要更新的工作区内项目的名称。:return:
<PremakeProject>
对象,允许设置项目特定的标志。
- generate()¶
创建
conantoolchain.premake5.lua
文件,该文件将根据工具链配置正确配置构建路径、二进制路径、配置设置以及编译器/链接器标志。