PremakeToolchain¶
警告
此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。
重要
这个类将生成仅与 Premake 版本 >= 5.0.0 兼容的文件
在 conanfiles 中可以使用 PremakeToolchain 生成器
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()
生成的文件¶
PremakeToolchain 在 conan install (或在缓存中构建包) 之后生成 conantoolchain.premake5.lua 文件,其中包含在 generate() 方法中提供的信息,以及从当前 settings、conf 等翻译的信息。
Premake 没有暴露任何种类的 API 来交互注入/修改构建脚本。 此外,premake 没有工具链的概念,因此遵循 premake 维护者的指示(参见 premake 讨论),由于 premake 是基于 Lua 脚本构建的,Conan 生成的文件是一个 Lua 脚本,它将覆盖原始 premake 脚本,添加以下信息
检测来自 Conan 设置的
buildtype。根据需要定义 C++ 标准。
根据需要定义 C 标准。
基于 conan profile 和 OS 检测 premake
action。定义构建文件夹,以避免默认 premake 行为,即在源代码仓库中创建构建文件夹和目标文件(这违反了 conan 最佳实践)。
基于用户配置值定义编译器和链接器标志和定义。
在交叉构建时定义正确的目标架构。
基于 conan 选项定义
fPIC标志。基于
sharedconan 选项,PremakeToolchain将把workspace的kind设置为SharedLib或StaticLib。
注意
PremakeToolchain 无法覆盖项目的 kind,如果该项目已经定义了 kind 属性(典型情况)。它只能覆盖顶层 workspace.kind,这只会影响没有定义 kind 的项目。
建议:由于 premake 没有像 CMake 的 BUILD_SHARED_LIBS 那样外部管理库创建类型的机制,因此建议在使用 conan 时避免在库项目中定义 kind 属性。
参考¶
- class PremakeToolchain(conanfile)¶
PremakeToolchain 生成器
- 参数:
conanfile –
< ConanFile 对象 >当前配方对象。始终使用self。
- extra_cxxflags¶
额外的
CXX标志列表。添加到buildoptions。
- extra_cflags¶
额外的
C标志列表。添加到buildoptions。
- extra_ldflags¶
额外的链接器标志列表。添加到
linkoptions。
- extra_defines¶
额外的预处理器定义列表。添加到
defines。
- project(project_name)¶
返回的对象也将具有与工作区相同的属性,但只会影响名称为 project_name 的项目。 :param project_name: 工作区中要更新的项目的名称。 :return:
<PremakeProject>对象,允许设置项目特定的标志。
- generate()¶
创建一个
conantoolchain.premake5.lua文件,该文件将根据工具链配置正确配置构建路径、二进制路径、配置设置以及编译器/链接器标志。