PremakeToolchain

警告

此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。

重要

此类将生成仅与 Premake 版本 >= 5.0.0 兼容的文件。

在 conanfile 中可以通过名称使用 PremakeToolchain 生成器。

conanfile.py
class Pkg(ConanFile):
    generators = "PremakeToolchain"
conanfile.txt
[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(或在缓存中构建包时)后,会根据 generate() 方法中提供的信息以及从当前 settingsconf 等翻译的信息,生成 conantoolchain.premake5.lua 文件。

Premake 不公开任何 API 来与构建脚本进行交互或修改。此外,Premake 没有工具链的概念。因此,遵循 premake 维护者的指示(请参阅 premake 讨论),由于 Premake 是基于 Lua 脚本构建的,Conan 生成的文件是一个 Lua 脚本,它将覆盖原始的 premake 脚本,并添加以下信息:

  • 从 Conan 设置中检测 buildtype

  • 根据需要定义 C++ 标准。

  • 根据需要定义 C 标准。

  • 根据 conan profile 和操作系统检测 premake action

  • 定义构建文件夹,以避免 premake 在源代码仓库中创建构建文件夹和对象文件的默认行为(这违背了 conan 的良好实践)。

  • 根据用户配置值定义编译器和链接器标志以及宏定义。

  • 在交叉编译时定义正确的目标架构。

  • 根据 conan 选项定义 fPIC 标志。

  • 基于 shared conan 选项,PremakeToolchain 会将 workspacekind 设置为 SharedLibStaticLib

注意

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)

返回的对象也将具有与 workspace 相同的属性,但只会影响名为 specified 的项目。:param project_name: 工作区内要更新的项目名称。:return: <PremakeProject> 对象,允许设置项目特定标志。

generate()

创建一个 conantoolchain.premake5.lua 文件,该文件将根据工具链配置正确配置构建路径、二进制文件路径、配置设置以及编译器/链接器标志。