CMAKE学习

简介: CMAKE学习

前面是名字,后面是指这个库是必须的

何给动态库添加三方库依赖

用LINK_DIRECTORIES 来指定三方库路径,然后通过库名称去链接。需要注意一个坑就是LINK_DIRECTORIES 要放到 ADD_LIBRARY 前面才行

file(GLOB_RECURSE header1_files "src/main/cpp/3rd/*.h")
file(GLOB_RECURSE source1_files "src/main/cpp/3rd/*.cpp")
LINK_DIRECTORIES("libs/${ANDROID_ABI}")    # 添加三方库的绝对/相对路径,用于搜索三方库。但是千万要注意一点:要放到ADD_LIBRARY之前,否则不生效!
ADD_LIBRARY (
             my_lib  # 设置生成动态库的名称
             SHARED  # 设置库类型,STATIC 或 SHARED
             # 需要编译的c/c++ 文件
             ${source1_files}
             src/main/cpp/jni_main.cpp
             )
target_link_libraries(
                       my_lib  # 链接目标
                       # Links the target library to the log library included in the NDK
                       ${log-lib}
                plug_ins_project        # 这个就是对应libplug_ins_project.so库文件
        )

编写CMakeLists.txt最常用的功能就是调用其他的.h头文件和.so/.a库文件,将.cpp/.c/.cc文件编译成可执行文件或者新的库文件。

通常一个CMakeLists.txt需按照下面的流程:

project(xxx)                                          #必须
add_subdirectory(子文件夹名称)                         #父目录必须,子目录不必
add_library(库文件名称 STATIC 文件)                    #通常子目录(二选一)
add_executable(可执行文件名称 文件)                     #通常父目录(二选一)
include_directories(路径)                              #必须
link_directories(路径)                                 #必须
target_link_libraries(库文件名称/可执行文件名称 链接的库文件名称)       #必须

CMakeLists.txt的基本结构

编写CMakeLists.txt最常用的功能就是调用其他的.h头文件和.so/.a库文件,将.cpp/.c/.cc文件编译成可执行文件或者新的库文件。

命令的官方网站:CMake Reference Documentation

最常用的命令如下(仅供后期查询,初期不需要细看):

# 本CMakeLists.txt的project名称
# 会自动创建两个变量,PROJECT_SOURCE_DIR和PROJECT_NAME
# ${PROJECT_SOURCE_DIR}:本CMakeLists.txt所在的文件夹路径
# ${PROJECT_NAME}:本CMakeLists.txt的project名称
project(xxx)
# 获取路径下所有的.cpp/.c/.cc文件,并赋值给变量中
aux_source_directory(路径 变量)
# 给文件名/路径名或其他字符串起别名,用${变量}获取变量内容
set(变量 文件名/路径/...)
# 添加编译选项
add_definitions(编译选项)
# 打印消息
message(消息)
# 编译子文件夹的CMakeLists.txt
add_subdirectory(子文件夹名称)
# 将.cpp/.c/.cc文件生成.a静态库
# 注意,库文件名称通常为libxxx.so,在这里只要写xxx即可
add_library(库文件名称 STATIC 文件)
# 将.cpp/.c/.cc文件生成可执行文件
add_executable(可执行文件名称 文件)
# 规定.h头文件路径
include_directories(路径)
# 规定.so/.a库文件路径
link_directories(路径)
# 对add_library或add_executable生成的文件进行链接操作
# 注意,库文件名称通常为libxxx.so,在这里只要写xxx即可
target_link_libraries(库文件名称/可执行文件名称 链接的库文件名称)

各行代表的含义

第1行:cmake需要的最低版本

第2行:创建了一个名为 HelloWorld 工程,对应生成一个 HelloWorld.sln 。project函数表示创建一个工程

第3行:添加一个名为 HelloWorld 的可执行程序项目,它的源代码为 HelloWorld.cxx


目录
相关文章
|
5天前
|
存储 自然语言处理 Linux
CMake基础(1)初识CMake
CMake基础(1)初识CMake
17 0
|
4月前
|
Java Linux 编译器
CMake从入门到弃坑
CMake 说明 cmake的定义是什么 ?-----高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了-----CMake!
87 1
CMake实战(二)
上一篇《CMake实战(一)》我们是把所有文件放在同一个目录下,而平常开发时,我们会将源文件进行分类,放到不同的目录下。接下来我们来看一下具体要怎么操作。
CMake实战(一)
CMake和Autotools一样,都是项目构建工具。可以简单理解为,帮助我们生成Makefile,方便编译。
CMake实战(三)
前面两篇《CMake实战(一)》,《CMake实战(二)》,主要是介绍单目录和多目录的编译,接下来看一下自定义编译选项和交叉编译。
|
C++
CMake教程6:CMake的一些实用小技巧
CMake教程6:CMake的一些实用小技巧
185 0
|
IDE 编译器 开发工具
CMake教程1:CMake是什么?
CMake教程1:CMake是什么?
113 0
|
Unix Linux C语言
|
Java Linux C语言
|
Unix 测试技术 C语言