CMake 学习--博主自行整理

来源:互联网 发布:ubuntu 系统剪贴板 编辑:程序博客网 时间:2024/06/07 06:58

参考文档: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