xmake做opengl开发时无法解析符号

xmake对于个人项目来说,构建比cmake简单太多,少折腾太多

但在我之前测试的时候,发现xmake链接glfw库的时候会出链接错误
这个问题是xmake在获取包时,倾向使用静态的库
这就导致部分包在链接时会无法解析符号之类的问题
(有些包反过来,使用静态库会无法解析符号,这次的例子也有)
至于为什么,我目前也不是很清楚

总之,打开xmake.lua

add_rules("mode.debug", "mode.release")

add_requires("glad")
add_requires("glfw3", {configs = {shared = true}})

target("XmakeTest")
    set_kind("binary")
    set_languages("cxx17")
    set_warnings("all")

    add_packages("glad")
    add_packages("glfw3")

    add_files("src/*.cpp")
    set_toolchains("clang")

别的不重要,关键是这两句add_requires()
对于glad,xmake默认会使用静态库,并且经过测试,使用动态库会报错
对于glfw3,通过{configs = {shared = true}},指定使用动态库

这样之后,编译就不会找不到符号了

下面做一些进阶一些的开发,经典做imgui的开发
测试代码在之前这篇博客有写
不过xmake.lua还是有点坑的,这里贴一下

add_rules("mode.debug", "mode.release")

add_requires("fmt")
add_requires("glad")
add_requires("glfw3", {configs = {shared = true}})
add_requires("vcpkg::imgui",{
    configs = {
        features = {
            "opengl3-binding",
            "glfw-binding",
            "docking-experimental"
        },
        shared = true
    }
})

target("XmakeTest")
    set_kind("binary")
    set_languages("cxx17")
    set_warnings("all")

    add_packages("fmt")
    add_packages("glad")
    add_packages("glfw3")
    add_packages("vcpkg::imgui")

    add_files("src/*.cpp")
    set_toolchains("clang")

使用vcpkg来获取imgui库,然后通过清单指定特性,还要指定动态库
一切正常的话结果应该是这样的

Licensed under CC BY-NC-SA 4.0