---
title: 通过CMake编译
description: "项目中可以使用CMake来更简便地使用毕昇编译器编译Ascend C算子，生成可执行文件、动态库、静态库或二进制文件。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/Ascendcopdevg/atlas_ascendc_10_00039.html
sourcePath: /source/zh/canncommercial/900/programug/Ascendcopdevg/atlas_ascendc_10_00039.html
indexId: 997867f94e0b5494c20ab31a7c97fec980fd1ca7168282ff8263711ce35a6ce981
---
# 通过CMake编译

项目中可以使用CMake来更简便地使用毕昇编译器编译Ascend C算子，生成可执行文件、动态库、静态库或二进制文件。

以下是CMake脚本的示例及其核心步骤说明：
```
# 1、find_package(ASC)是CMake中用于查找和配置Ascend C编译工具链的命令
find_package(ASC)
# 2、指定项目支持的语言包括ASC和CXX，ASC表示支持使用毕昇编译器对Ascend C编程语言进行编译
project(kernel_samples LANGUAGES ASC CXX)
# 3、使用CMake接口编译可执行文件、动态库、静态库、二进制文件
add_executable(demo
add_custom.asc
)
#.....
target_compile_options(demo PRIVATE
# --npu-arch用于指定NPU的架构版本，dav-后为架构版本号，各产品型号对应的架构版本号请通过
对应关系表
进行查询。
# <COMPILE_LANGUAGE:ASC>:表明该编译选项仅对语言ASC生效
$<$<COMPILE_LANGUAGE:ASC>: --npu-arch=dav-2201>
)
```


以下是动态库、静态库编译示例，同时展示如何将源文件切换为用语言ASC编译：

- 编译.cpp文件生成动态库

```
# 将.cpp文件置为ASC属性，启用Ascend C语言进行编译
set_source_files_properties(
add_custom_base.cpp
sub_custom_base.cpp
PROPERTIES LANGUAGE ASC
)
add_library(kernel_lib SHARED
add_custom_base.cpp
sub_custom_base.cpp
)
target_compile_options(kernel_lib PRIVATE
$<$<COMPILE_LANGUAGE:ASC>: --npu-arch=dav-2201>
)
add_executable(demo
main.cpp
)
target_link_libraries(demo PRIVATE
kernel_lib
)
```


- 编译.asc文件生成静态库

```
# .asc文件会默认启用Ascend C语言进行编译，不需要通过set_source_files_properties进行设置
add_library(kernel_lib STATIC
add_custom_base.asc
sub_custom_base.asc
)
target_compile_options(kernel_lib PRIVATE
$<$<COMPILE_LANGUAGE:ASC>: --npu-arch=dav-2201>
)
add_executable(demo
main.cpp
)
target_link_libraries(demo PRIVATE
kernel_lib
)
```


下文列出了使用CMake编译时常用的链接库、以及默认链接库。


**表1 常用的链接库（在使用高阶API时，必须链接以下库，因为这些库是高阶API功能所依赖的。在其他场景下，可以根据具体需求选择是否链接这些库。）**

| 使用场景 | 名称 |
| --- | --- |
| 使用高阶API相关的Tiling接口时需要同时链接。 | libtiling\_api.a |
| 使用高阶API相关的Tiling接口时需要同时链接。 | libregister.so |
| 使用高阶API相关的Tiling接口时需要同时链接。 | libgraph\_base.so |
| 使用PlatformAscendC相关硬件平台信息接口时需要链接。 | libplatform.so |


**表2 默认链接库**

| 名称 | 作用描述 |
| --- | --- |
| libascendc\_runtime.a | Ascend C算子参数等组装库。 |
| libruntime.so | Runtime运行库。 |
| libprofapi.so | Ascend C算子运行性能数据采集库。 |
| libunified\_dlog.so | CANN日志收集库。 |
| libmmpa.so | CANN系统接口库。 |
| libascend\_dump.so | CANN维测信息库。 |
| libc\_sec.so | CANN安全函数库。 |
| liberror\_manager.so | CANN错误信息管理库。 |
| libascendcl.so | acl相关接口库。 |
