静态库和动态库的编译切换

2016-08-03 ruki 更多博文 » 博客 » GitHub »

xmake 静态库 动态库

原文链接 https://waruqi.github.io/2016/08/03/switch-library-kind.cn/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


如果你想在同一个target上既编译静态库,又能编译动态库,那么稍微修改下 xmale.lua就行了:

add_target("test")

    -- 设置编译target的类型,之前是:static/shared,现在改成动态的
    set_kind("$(kind)")

    -- 添加文件
    add_files(*.c)

好了,现在默认编译的时候,会生成静态库:libtest.a

如果你想生成动态库,只需要执行:


# 简写
xmake f -k shared

# 或者
xmake config --kind=shared

# 编译
xmake

配置成动态库模式,重建下就行了。。参数:-k/--kind 可以手动在配置的时候指定,需要编译的target类型,实际会去影响:

set_kind("$(kind)")

中的$(kind)的配置变量。。

如果你想在target针对static/shared类型,分别处理不同的宏开关,也可以使用 if kinds("static") then 来判断

add_target("test")

    -- 设置编译target的类型,之前是:static/shared,现在改成动态的
    set_kind("$(kind)")

    -- 添加文件
    add_files(*.c)

    -- 如果是动态库,则定义宏:SHARED
    if kinds("shared") then
        add_defines("SHARED")
    end

上面说的 -k/--kind配置参数,是xmake内置参数,影响当前工程的所有指定了 $(kind) 的target,如果觉得这样影响面太广,我想让不同的target,在不同的时机切换编译静态库和动态库,可以使用option的接口,自定义一个配置参数:

-- 自定义一个配置参数
add_option("mykind")
    set_option_showmenu(true)
    set_option_description("Set my target kind: static or shared")

add_target("test")

    -- 设置编译target的类型,使用 xmake --mykind=static参数
    set_kind("$(mykind)")

    -- 添加文件
    add_files(*.c)

这样,只需要执行xmake f --mykind=shared 就可以使用自己的配置参数,进行切换编译类型了。。