diff options
| author | ruki <waruqi@gmail.com> | 2019-06-22 12:52:12 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2019-06-22 12:52:12 +0800 |
| commit | 082afc08aaec18701866d19fefc5040d02a86900 (patch) | |
| tree | da9ddd1878e91a2cbfc81f5d315946a20bf8ab15 /zh-cn/guide/project_examples.md | |
| parent | 4b612c136ea55e57eb331bdd9955974e2cfdbde7 (diff) | |
| download | xmake-docs-082afc08aaec18701866d19fefc5040d02a86900.tar.gz xmake-docs-082afc08aaec18701866d19fefc5040d02a86900.zip | |
add guide for zh-cn
Diffstat (limited to 'zh-cn/guide/project_examples.md')
| -rw-r--r-- | zh-cn/guide/project_examples.md | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/zh-cn/guide/project_examples.md b/zh-cn/guide/project_examples.md new file mode 100644 index 00000000..2f85824c --- /dev/null +++ b/zh-cn/guide/project_examples.md @@ -0,0 +1,339 @@ + +## 可执行程序 + +```lua +target("test") + set_kind("binary") + add_files("src/*c") +``` + +## 静态库程序 + +```lua +target("library") + set_kind("static") + add_files("src/library/*.c") + +target("test") + set_kind("binary") + add_files("src/*c") + add_deps("library") +``` + +通过`add_deps`将一个静态库自动链接到test可执行程序。 + +## 动态库程序 + +```lua +target("library") + set_kind("shared") + add_files("src/library/*.c") + +target("test") + set_kind("binary") + add_files("src/*c") + add_deps("library") +``` + +通过`add_deps`将一个动态库自动链接到test可执行程序。 + +## Qt程序 + +创建一个空工程: + +```console +$ xmake create -l c++ -t console_qt test +$ xmake create -l c++ -t static_qt test +$ xmake create -l c++ -t shared_qt test +$ xmake create -l c++ -t quickapp_qt test +``` + +默认会自动探测Qt环境,当然也可以指定Qt SDK环境目录: + +```console +$ xmake f --qt=~/Qt/Qt5.9.1 +``` + +如果想要使用windows下mingw的Qt环境,可以切到mingw的平台配置,并且指定下mingw编译环境的sdk路径即可,例如: + +```console +$ xmake f -p mingw --sdk=C:\Qt\Qt5.10.1\Tools\mingw530_32 +``` + +上述指定的mingw sdk用的是Qt下Tools目录自带的环境,当然如果有其他第三方mingw编译环境,也可以手动指定, 具体可以参考:[mingw编译配置](#mingw)。 + +更多详情可以参考:[#160](https://github.com/xmake-io/xmake/issues/160) + +### 静态库程序 + +```lua +target("qt_static_library") + add_rules("qt.static") + add_files("src/*.cpp") + add_frameworks("QtNetwork", "QtGui") +``` + +### 动态库程序 + +```lua +target("qt_shared_library") + add_rules("qt.shared") + add_files("src/*.cpp") + add_frameworks("QtNetwork", "QtGui") +``` + +### 控制台程序 + +```lua +target("qt_console") + add_rules("qt.console") + add_files("src/*.cpp") +``` + +### Quick应用程序 + +```lua +target("qt_quickapp") + add_rules("qt.application") + add_files("src/*.cpp") + add_files("src/qml.qrc") + add_frameworks("QtQuick") +``` + +### Widgets应用程序 + +```lua +target("qt_widgetapp") + add_rules("qt.application") + add_files("src/*.cpp") + add_files("src/mainwindow.ui") + add_files("src/mainwindow.h") -- 添加带有 Q_OBJECT 的meta头文件 + add_frameworks("QtWidgets") +``` + +### Android应用程序 + +2.2.6之后版本,可以直接切到android平台编译Quick/Widgets应用程序,生成apk包,并且可通过`xmake install`命令安装到设备。 + +```console +$ xmake create -t quickapp_qt -l c++ appdemo +$ cd appdemo +$ xmake f -p android --ndk=~/Downloads/android-ndk-r19c/ --android_sdk=~/Library/Android/sdk/ -c +$ xmake +[ 0%]: compiling.qt.qrc src/qml.qrc +[ 50%]: ccache compiling.release src/main.cpp +[100%]: linking.release libappdemo.so +[100%]: generating.qt.app appdemo.apk +``` + +然后安装到设备: + +```console +$ xmake install +installing appdemo ... +installing build/android/armv7-a/release/appdemo.apk .. +Success +install ok!👌 +``` + +## Cuda程序 + +创建一个空工程: + +```console +$ xmake create -P test -l cuda +$ cd test +$ xmake +``` + +```lua +-- define target +target("cuda_console") + set_kind("binary") + add_files("src/*.cu") + -- generate SASS code for SM architecture of current host + add_cugencodes("native") + -- generate PTX code for the virtual architecture to guarantee compatibility + add_cugencodes("compute_30") +``` + +<p class="tip"> +从v2.2.7版本开始,默认构建会启用device-link,@see https://devblogs.nvidia.com/separate-compilation-linking-cuda-device-code/ +如果要显示禁用device-link,可以通过`add_values("cuda.devlink", false)` 来设置。 +</p> + +默认会自动探测cuda环境,当然也可以指定Cuda SDK环境目录: + +```console +$ xmake f --cuda=/usr/local/cuda-9.1/ +$ xmake +``` + +更多详情可以参考:[#158](https://github.com/xmake-io/xmake/issues/158) + +## WDK驱动程序 + +默认会自动探测wdk所在环境,当然也可以指定wdk sdk环境目录: + +```console +$ xmake f --wdk="G:\Program Files\Windows Kits\10" -c +$ xmake +``` + +更多详情可以参考:[#159](https://github.com/xmake-io/xmake/issues/159) + +### umdf驱动程序 + +```lua +target("echo") + add_rules("wdk.driver", "wdk.env.umdf") + add_files("driver/*.c") + add_files("driver/*.inx") + add_includedirs("exe") + +target("app") + add_rules("wdk.binary", "wdk.env.umdf") + add_files("exe/*.cpp") +``` + +### kmdf驱动程序 + +```lua +target("nonpnp") + add_rules("wdk.driver", "wdk.env.kmdf") + add_values("wdk.tracewpp.flags", "-func:TraceEvents(LEVEL,FLAGS,MSG,...)", "-func:Hexdump((LEVEL,FLAGS,MSG,...))") + add_files("driver/*.c", {rule = "wdk.tracewpp"}) + add_files("driver/*.rc") + +target("app") + add_rules("wdk.binary", "wdk.env.kmdf") + add_files("exe/*.c") + add_files("exe/*.inf") +``` + +### wdm驱动程序 + +```lua +target("kcs") + add_rules("wdk.driver", "wdk.env.wdm") + add_values("wdk.man.flags", "-prefix Kcs") + add_values("wdk.man.resource", "kcsCounters.rc") + add_values("wdk.man.header", "kcsCounters.h") + add_values("wdk.man.counter_header", "kcsCounters_counters.h") + add_files("*.c", "*.rc", "*.man") +``` + +```lua +target("msdsm") + add_rules("wdk.driver", "wdk.env.wdm") + add_values("wdk.tracewpp.flags", "-func:TracePrint((LEVEL,FLAGS,MSG,...))") + add_files("*.c", {rule = "wdk.tracewpp"}) + add_files("*.rc", "*.inf") + add_files("*.mof|msdsm.mof") + add_files("msdsm.mof", {values = {wdk_mof_header = "msdsmwmi.h"}}) +``` + +### 生成驱动包 + +可以通过以下命令生成.cab驱动包: + +```console +$ xmake [p|package] +$ xmake [p|package] -o outputdir +``` + +输出的目录结构如下: + +``` + - drivers + - sampledsm + - debug/x86/sampledsm.cab + - release/x64/sampledsm.cab + - debug/x86/sampledsm.cab + - release/x64/sampledsm.cab +``` + +### 驱动签名 + +默认编译禁用签名,可以通过`set_values("wdk.sign.mode", ...)`设置签名模式来启用签名。 + +#### 测试签名 + +测试签名一般本机调试时候用,可以使用xmake自带的test证书来进行签名,例如: + +```lua +target("msdsm") + add_rules("wdk.driver", "wdk.env.wdm") + set_values("wdk.sign.mode", "test") +``` + +不过这种情况下,需要用户手动在管理员模式下,执行一遍:`$xmake l utils.wdk.testcert install`,来生成和注册test证书到本机环境。 +这个只需要执行一次就行了,后续就可以正常编译和签名了。 + +当然也可以使用本机已有的有效证书去签名。 + +从sha1来选择合适的证书进行签名: + +```lua +target("msdsm") + add_rules("wdk.driver", "wdk.env.wdm") + set_values("wdk.sign.mode", "test") + set_values("wdk.sign.thumbprint", "032122545DCAA6167B1ADBE5F7FDF07AE2234AAA") +``` + +从store/company来选择合适的证书进行签名: + +```lua +target("msdsm") + add_rules("wdk.driver", "wdk.env.wdm") + set_values("wdk.sign.mode", "test") + set_values("wdk.sign.store", "PrivateCertStore") + set_values("wdk.sign.company", "tboox.org(test)") +``` + +#### 正式签名 + +通过指定对应的正式签名证书文件进行签名: + +```lua +target("msdsm") + add_rules("wdk.driver", "wdk.env.wdm") + set_values("wdk.sign.mode", "release") + set_values("wdk.sign.company", "xxxx") + set_values("wdk.sign.certfile", path.join(os.projectdir(), "xxxx.cer")) +``` + +### 生成低版本驱动 + +如果想在wdk10环境编译生成win7, win8等低版本系统支持的驱动,可以通过设置`wdk.env.winver`来切换系统版本: + +```lua +set_values("wdk.env.winver", "win10") +set_values("wdk.env.winver", "win10_rs3") +set_values("wdk.env.winver", "win81") +set_values("wdk.env.winver", "win8") +set_values("wdk.env.winver", "win7") +set_values("wdk.env.winver", "win7_sp1") +set_values("wdk.env.winver", "win7_sp2") +set_values("wdk.env.winver", "win7_sp3") +``` + +我们也可以手动指定编译的目标程序支持的windows版本: + +```console +$ xmake f --wdk_winver=[win10_rs3|win8|win7|win7_sp1] +$ xmake +``` + +## WinSDK程序 + +```lua +target("usbview") + add_rules("win.sdk.application") + + add_files("*.c", "*.rc") + add_files("xmlhelper.cpp", {rule = "win.sdk.dotnet"}) +``` + +更多详情可以参考:[#173](https://github.com/xmake-io/xmake/issues/173) + |
