xmake-vscode配置

1、下载并安装vscode
2、下载并安装语言包
image.png
3、下载并安装“C/C++ for Visual Studio Code”插件(必备的插件,如果不安装,代码无法跳转,也没有自动补全)
image.png
4、下载并安装“C/C++ Extension Pack”
image.png
5、下载CodeLLDB(用于调试C/CPP代码)
image.png

如果遇到无法访问:https://github.com/vadimcn/vscode-lldb/releases/download/v1.8.1/codelldb-x86_64-windows.vsix,如:

image.png

可以多尝试几次。

将VSIX下载的本地之后,可以按照如下方式进行安装:

image.png
6、下载并安装“Git Graph” (Git版本控制)
image.png
7、下载并安装“compareit”(比对工具)
image.png
8、下载并安装“TODO Highlight”(高亮显示TODO内容)
image.png
9、下载并安装“xmake”
image.png

本地也需要安装xmake:Releases · xmake-io/xmake (github.com)

10、创建C++工程

【1】选择一个文件夹
【2】查看 -> 命令面板 ->
【3】XMake:NewFiles


image.png

可以直接选择命令:XMake:CreateProject,但是还是避免不了选择一个文件夹。

11、Xmake常用工具

【1】编译

image.png

在这里可以选择debug模式或者release模式。

image.png

可以选择其它平台,实现交叉编译:

image.png

【2】运行

image.png

【3】断点

image.png

【4】编译架构

image.png

【5】宏记录

image.png

【6】宏回放

image.png

【7】编译目标

image.png

下图所示,默认编译所有的目标:

image.png

可以在xmake.lua文件种配置多个目标:

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

target("test1")
    set_kind("binary")
    add_files("src/*.cpp")

target("test2")
    set_kind("binary")
    add_files("src/*.cpp")

target("test3")
    set_kind("binary")
    add_files("src/*.cpp")
image.png

可以选择具体某个目标,这样编译的时候只会编译具体某个目标。

通过 add_files 函数可以添加编译目标具体的文件。

【8】编译等级

文件 -> 首选项 -> 设置 -> 搜索xmake
image.png

默认是warning,如果选择verbose,编译时就会在控制台打印详细的编译信息。

11、C++生成的目标文件

C++生成的目标文件可能是:可执行文件,静态库,动态库。

在xmake.lua文件中可以指定这三种类型:

   set_kind("binary")  // 可执行文件
   set_kind("static")  // 静态库
   set_kind("shared") // 动态库

设置目标类型,目前支持的类型有:

描述
phony 假的目标程序
binary 二进制程序
static 静态库程序
shared 动态库程序
object 仅仅编译对象集合
headeronly 仅仅头文件集合
12、添加宏定义

编译宏的设置,大多数c/c++项目都会用到,一般如果我们设置编译flags传给gcc/clang,都是要配置:-DXXX

而在xmake里面,提供了add_defines()内置接口来配置:

add_defines("XXX")

可以通过 is_plat 判断平台

if is_plat("linux", "macosx") then
   add_defines("YYY") 
end

以上代码的意思是,如果是linux或macosx平台,那么则添加额外的宏。

13、全局配置
target("test1")
    add_defines("TEST1")

target("test2")
    add_defines("TEST2")

一般情况下,在 target 下的配置都是属于当前 target 下的局部配置,是属于某个 target 的,当下一个 target 开始时,会自动结束上一个 target。

但是,如果想要配置全局的配置,那么可以这样做:

add_defines("XXX")  -- 全局配置
target("test1")
    add_defines("TEST1")

target("test2")
    add_defines("TEST2")

宏定义XXX是全局的配置。

也可以使用 target_end 结束 target,结束 target 之后的配置是全局的:

target("test1")
    add_defines("TEST1")
target_end()

add_defines("XXX")  -- 全局配置

target("test2")
    add_defines("TEST2")
14、添加编译选项

xmake可以使用 add_cflags 、add_cxflags、add_cxxflags 函数添加编译选项。

add_cflags:仅添加C代码相关编译flags
add_cxflags:添加C/C++代码相关编译flags
add_cxxflags:仅添加C++代码相关编译flags

一些配置在某个平台上不支持,可以先判断平台再添加编译选项:

-- 添加编译选项
add_cxxflags("-g", "-O2", "-DDEBUG")
if is_plat("windows") then
    add_cflags("/MT")
end

所有选项值都基于gcc的定义为标准,如果其他编译器不兼容(例如:vc),xmake会自动内部将其转换成对应编译器支持的选项值。 用户无需操心其兼容性,如果其他编译器没有对应的匹配值,那么xmake会自动忽略器设置。

我们也可以通过force参数来强制禁用flags的自动检测,直接传入编译器,哪怕编译器有可能不支持,也会设置:

add_cflags("-g", "-O2", {force = true})
15、添加库相关设置
add_links("pthread") -- 链接库名
add_includedirs("src/head/ls_02") -- 设置头文件搜索目录(--cxflags="-I/xxx")
add_linkdirs("/usr/local/include") -- 设置库搜索目录
add_sysincludedirs("") -- 设置系统头文件搜索目录(-isystem /usr/include)

为了保证链接库的依赖顺序,系统库链接通常都会比较靠后,我们通过add_syslinks()来专门设置系统库链接,而add_links()通常用于非系统库链接:

target("test") 
    set_kind("binary") 
    add_links("A", "B") 
    add_syslinks("pthread")
16、设置语言标准

c标准和c++标准可同时进行设置,例如:

-- 设置c代码标准:c99, c++代码标准:c++11
set_languages("c99", "c++11")

支持的语言标准目前主要有以下几个:

描述
ansi c语言标准: ansi
c89 c语言标准: c89
gnu89 c语言标准: gnu89
c99 c语言标准: c99
gnu99 c语言标准: gnu99
c11 c语言标准: c11
c17 c语言标准: c17
clatest c语言标准: clatest
描述
cxx98 c++语言标准: c++98
gnuxx98 c++语言标准: gnu++98
cxx11 c++语言标准: c++11
gnuxx11 c++语言标准: gnu++11
cxx14 c++语言标准: c++14
gnuxx14 c++语言标准: gnu++14
cxx1z c++语言标准: c++1z
gnuxx1z c++语言标准: gnu++1z
cxx17 c++语言标准: c++17
gnuxx17 c++语言标准: gnu++17
cxx20 c++语言标准: c++20
gnuxx20 c++语言标准: gnu++20
cxxlatest c++语言标准: c++latest
gnuxxlatest c++语言标准: gnu++latest
17、设置编译优化

xmake提供了几种内置的编译优化配置:none, fast, faster, fastest, smallest, aggressive,来实现各种级别的编译优化。

-- 最快运行速度的优化
set_optimize("fastest")
描述 gcc/clang msvc
none 禁用优化 -O0 -Od
fast 快速优化 -O1 default
faster 更快的优化 -O2 -O2
fastest 最快运行速度的优化 -O3 -Ox -fp:fast
smallest 最小化代码优化 -Os -O1 -GL
aggressive 过度优化 -Ofast -Ox -fp:fast
18、添加源文件
add_files("src/test_*.c") 
add_files("src/xxx/**.cpp") 
add_files("src/asm/*.S", "src/objc/**/hello.m")

其中通配符表示匹配当前目录下文件,而*则匹配多级目录下的文件。

在添加源文件的同时排除一些源文件:

-- 递归添加src下的所有c文件,但是不包括src/impl/下的所有c文件
add_files("src/**.c|impl/*.c")

-- 添加src下的所有cpp文件,但是不包括src/test.cpp、src/hello.cpp以及src下所有带xx_前缀的cpp文件
add_files("src/*.cpp|test.cpp|hello.cpp|xx_*.cpp")
19、删除源文件
target("test") 
     add_files("src/*.c") 
    del_files("src/test.c")

上面的例子,可以从src目录下添加除test.c以外的所有文件,当然这个也可以通过

add_files("src/*.c|test.c")

来达到相同的目的。

20、设置strip模式

设置当前目标的strip模式,目前支持一下模式:

描述
debug 链接的时候,strip掉调试符号
all 链接的时候,strip掉所有符号,包括调试符号

这个api一般在release模式下使用,可以生成更小的二进制程序。

set_strip("all")
21、设置是否启用或禁用目标
set_enabled(true)
22、设置是否为默认构建安装目标
set_default(false)
23、设置关联选项
-- 定义一个hello选项
option("hello")
    set_default(false)
    set_showmenu(true)
    add_defines("HELLO_ENABLE")

target("test")
    -- 如果hello选项被启用了,这个时候就会将-DHELLO_ENABLE宏应用到test目标上去
    set_options("hello")
24、条件判断的api
接口 描述 支持版本
is_os 判断当前构建目标的操作系统 >= 2.0.1
is_arch 判断当前编译架构 >= 2.0.1
is_plat 判断当前编译平台 >= 2.0.1
is_host 判断当前主机环境操作系统 >= 2.1.4
is_mode 判断当前编译模式 >= 2.0.1
is_kind 判断当前编译类型 >= 2.0.1
is_config 判断指定配置是否为给定的值 >= 2.2.2
has_config 判断配置是否启用或者存在 >= 2.2.2
has_package 判断依赖包是否被启用或者存在 >= 2.2.3
25、基于Android的交叉编译

【1】选择Android平台

image.png

【2】在首选项中配置Android NDK路径

image.png

必须要配置Android NDK的路径,否则Android的交叉编译无效。

【3】点击编译

image.png
26、更多配置
-- 设置目标文件名字不带后缀跟前缀
set_basename("")

-- 设置目标文件名字带后缀跟前缀
set_filename("")

-- 设置目标文件的的前缀
set_prefixname("")

-- 设置目标文件的的后缀(如将默认的:libtest.so 改成 libtest-d.so)
set_suffixname("-d")

-- 设置目标文件的扩展名(例如将默认的:libtest.so 改成 test.dll)
set_extension(".dll")

-- 设置警告级别
-- none 禁用所有警告
-- less 启用较少的警告
-- more 启用较多的警告
-- all 启用所有警告
-- allextra 启用所有警告+额外的警告
-- everything 启用全部支持的警告
-- error 将所有警告作为编译错误
set_warnings("all", "error")

-- 设置c预编译头文件
set_pcheader("header.h")

-- 设置c++预编译头文件
set_pcxxheader("header.h")

-- 添加子工程目标依赖
add_deps("test1", "test2")
27、xmake.lua文件目标配置示例
target("test1")
    set_kind("binary") -- 生成可执行文件,windows平台生成.exe文件
    set_basename("test1_$(mode)_$(arch)")
    -- 相当于add_cxxflags("-Isrc/head/ls_02 -Isrc/head/ls_03 -Isrc/head/ls_04 -Isrc/head/ls_05 -Isrc/head/ls_06")
    add_includedirs("src/head/ls_02", "src/head/ls_03", "src/head/ls_04", "src/head/ls_05", "src/head/ls_06")
    add_files("src/main.cpp", "src/cpp/**.cpp")
target_end()

target("test2")
    set_kind("static") -- 生成可静态库,windows平台生成.lib文件,Android平台生成.a文件
    set_basename("test1_$(mode)_$(arch)")
    -- 相当于add_cxxflags("-Isrc/head/ls_02 -Isrc/head/ls_03 -Isrc/head/ls_04 -Isrc/head/ls_05 -Isrc/head/ls_06")
    add_includedirs("src/head/ls_02", "src/head/ls_03", "src/head/ls_04", "src/head/ls_05", "src/head/ls_06")
    add_files("src/main.cpp", "src/cpp/**.cpp")
target_end()

target("test3")
    set_kind("shared") -- 生成动态库,windows平台生成.dll文件,Android平台生成.so文件
    set_basename("test1_$(mode)_$(arch)")
    -- 相当于add_cxxflags("-Isrc/head/ls_02 -Isrc/head/ls_03 -Isrc/head/ls_04 -Isrc/head/ls_05 -Isrc/head/ls_06")
    add_includedirs("src/head/ls_02", "src/head/ls_03", "src/head/ls_04", "src/head/ls_05", "src/head/ls_06")
    add_files("src/main.cpp", "src/cpp/**.cpp")
target_end()
28、xmake更加详细的信息

https://xmake.io/mirror/zh-cn/manual/project_target.html
https://xmake.io/#/zh-cn/getting_started

[本章完...]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容