参考文档:https://www.kancloud.cn/itfanr/cmake-practice/82981
->基本语法:
①PROJECT(projectname, [CXX] [C] [JAVA])
指定项目名称,[]可不写,不写默认都存在
②SET(value_change, value)
类似C语言中的宏定义,引用为${value_change}
③ADD_EXECUTABLE( hello ${SRC_LISTS})
生成可执行文件hello,SRC_LISTS为原文件
④ADD_SUBDIRECTORY(src bin)
表示该项目中的子目录,一般在最外层指定
⑤ADD_LIBRARY()
将源程序转换成库的形式
->工程形式的cmake
假设工程目录的地址为/test,将源程序放在/test/src中,并在/test/src目录下新建CMakeLists.txt,在该CMakeLists.txt中写针对于/test/src文件中的配置程序
as:PROJECT(HELLO)
SET(SRC,main.c)
ADD_EXECUTABLE(hello,${SRC})
在目录为/test中也需要新建一个CMakeLists.txt,在该CMakeLists.txt中主要写该项目的组成信息
as:PROJECT(HELLO)
ADD_SUBDIRECTORY(src)
采用外部运行的方式(这样可以将编译后的全部文件和源程序保持相对独立的关系)在/test文件夹下新建build文件夹,此时build路径为/test/build,在该目录下运行cmake .. 之后运行make就可以得到可执行程序
->将运行的程序保存成库的形式
ADD_LIBRARY()根据不同的参数可以生成不同形式的库,SHARED动态库 STATIC静态库 MODULE
as: SET(SRC hello.c)
ADD_LIBRARY(hello SHARED ${SRC})
执行的结果生成libhello.so文件
->调用第三方库
和Makefile类似,需要引入include所在的地址,lib所在的地址,并指定需要使用哪个lib文件
as:
PROJECT(HELLO)
SET(SRC main.c)
INCLUDE_DIRECTORIES(library_path) 引入调用include路径,类似Makefile中的-I
LINK_DIRECTORIES(lnk_path) 引入library路径,类似Makefile中的-L
ADD_EXECUTABLE(hello,${SRC}) 执行生成可执行程序hello
TARGET_LINK_LIBRARIES(hello test) 在可执行程序hello中调用了libtest.so,类似Makefile中的-ltest