跳转到内容

构建目标

之前我们已经简单讲过,可以通过 xmake build 命令来构建工程。

这里我们再来详细讲解下,首先,我们先看下它的完整命令格式。

命令格式

sh
$ xmake build [options] [target]

其中,[target] 指定需要构建的 target 目标,这是可选的,如果没有设置,那么默认会构建所有的目标程序(被标记为 default = false 的除外)。

执行效果如下:

sh
$ xmake build
[ 17%]: cache compiling.release src/main.cpp
[ 23%]: cache compiling.release src/foo.cpp
[ 35%]: linking.release libfoo.a
[ 71%]: linking.release test
[100%]: build ok, spent 1.173s

通常我们可以省略后面的 build 子命令,因为 xmake 命令的默认行为就是执行构建。

sh
$ xmake
[ 17%]: cache compiling.release src/main.cpp
[ 23%]: cache compiling.release src/foo.cpp
[ 35%]: linking.release libfoo.a
[ 71%]: linking.release test
[100%]: build ok, spent 1.173s

构建特定目标

如果要指定构建特定的目标程序,可以执行:

sh
$ xmake build foo

注意

这个时候,需要写全 build 子命令,否则目标名可能会跟其他子命令冲突。

重新构建目标

sh
$ xmake -r

或者

sh
$ xmake --rebuild

都可以实现强制重新编译目标程序。

构建全部目标程序

如果 target 被配置为 default = false,那么默认是不会编译它的。

lua
target("test")
    set_default(false)
    add_files("src/*.c")

如果想要构建所有目标, 包括这些 default = false 的目标程序,那么可以传递 -a/--all 参数。

sh
$ xmake build -a

或者

sh
$ xmake build --all

查找详细编译命令

如果我们想查看完整的编译器命令参数,来排查 flags 配置等问题,可以使用 xmake -v

sh
$ xmake -v
[ 23%]: cache compiling.release src/main.cpp
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -c -Qunused-arguments -target x86_64-apple-macos15.2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -o build/.objs/test/macosx/x86_64/release/src/main.cpp.o src/main.cpp
[ 47%]: linking.release test
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -o build/macosx/x86_64/release/test build/.objs/test/macosx/x86_64/release/src/main.cpp.o -target x86_64-apple-macos15.2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk -lz -Wl,-x -Wl,-dead_strip
[100%]: build ok, spent 0.585s

查看错误日志和堆栈

如果在编译过程中遇到问题,构建失败了,会默认显示编译错误,但如果配置上有语法错误,并不会显示完整的堆栈。

如果想要进一步定位问题,可以通过下面的命令,查看完整的构建日志,包括配置堆栈。

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

target("foo")
    set_kind("static")
    add_files("src/foo.cpp")

target("test")
    set_kind("binary")
    dd_deps("foo")   --------------- 不正确的接口
    add_files("src/main.cpp")
sh
$ xmake -vD
error: @programdir/core/main.lua:329: @programdir/core/sandbox/modules/import/core/base/task.lua:65: @progr
amdir/core/project/project.lua:1050: ./xmake.lua:9: attempt to call a nil value (global 'dd_deps')
stack traceback:
    [./xmake.lua:9]: in main chunk  ----------------- 实际配置错误的地方

stack traceback:
        [C]: in function 'error'
        @programdir/core/base/os.lua:1075: in function 'os.raiselevel'
        (...tail calls...)
        @programdir/core/main.lua:329: in upvalue 'cotask'
        @programdir/core/base/scheduler.lua:406: in function <@programdir/core/base/scheduler.lua:399>