Skip to content

Xmake配置

xmake.lua

lua
-- 自动更新vscode的配置,使得clangd能够进行头文件跳转,让下面add_includedirs能够进行代码跳转
add_rules("plugin.compile_commands.autoupdate", {outputdir = ".vscode"})	
add_rules("mode.debug", "mode.release")

target("helloworld")
    set_kind("binary")  
        -- binary(默认)可执行文件
        -- static 静态库
        -- shared 动态链接库
        -- headeronly 纯头文件
        -- phony 伪target,仅用于添加一些可继承的flag、协调target编译顺序,不会执行编译链接操作

    add_files("src/*.cpp")	-- 构建src目录下一层目录所有的cpp文件
	add_files("src/**.cpp")	-- 构建src目录下所有的cpp文件
    -- add_files 加入的所有源文件都会被编译为中间文件,然后链接到目标文件中
        -- .c后缀,自动调用C编译器编译
        -- .cpp/.cc/.cxx后缀的文件会调用C++编译器编译
        -- .cu后缀的文件会调用CUDA编译器编译
        -- .asm/.S后缀的文件会调用汇编器汇编

    -- 编译器参数:
    -- add_cflags():添加C编译器的编译参数
    -- add_cxxflags():添加C++编译器的编译参数
    -- add_cuflags():添加CUDA编译器的编译参数
    -- add_asflags():添加汇编语言的汇编参数
    -- add_cxflags():同时对C编译器和C++编译器启用的编译参数
    -- add_ldflags():添加二进制文件链接参数
    -- add_arflags():添加静态库生成参数
    -- add_shflags():添加动态链接库生成参数

    -- 添加头文件目录
    -- add_includedirs("src/include")

    -- 添加链接目录与链接库:
    -- add_linkdirs("src/lib")          链接器查找第三方链接库的目录
    -- add_links("myext")               第三方链接库名
    -- add_syslinks("pthread", "m")     在add_links之后才进行链接

    -- 添加预定义宏
    -- add_defines("MYMACRO=hello")

示例1:

c
Project
|-- src
|   |-- include
|   |   `-- add.h
|   |-- lib
|   |   `-- add.cpp
|   `-- main.cpp
`-- xmake.lua

xmake.lua

lua
add_rules("plugin.compile_commands.autoupdate", {outputdir = ".vscode"})	
add_rules("mode.debug", "mode.release")
target("Project")
    set_kind("binary")
    add_files("src/**.cpp")			-- src目录下所有的cpp文件加入编译
    add_includedirs("src/include")	-- 头文件目录
    add_linkdirs("src/lib")			-- 添加链接目录与链接库

main.cpp

c++
#include <iostream>
#include <add.h>
using namespace std;

int main(int argc, char** argv)
{
    cout << "hello world!" << endl;
    std::cout << add(1, 2) << std::endl;
    return 0;
}

add.h

c++
#include "iostream"
using namespace std;
int add(int a, int b);

add.cpp

c++
#include "add.h"
int add(int a, int b) {
    return a + b;
}

如有转载或 CV 的请标注本站原文地址