cmake初步使用

cmake 实践

如果只有几个文件,可以直接写Makefile,但是如果工程很大,则cmake省事很多。

1. cmake的Hello world

创建两个文件:main.c  CMakeLists.txt(注意文件名大小写,大小写相关)
1)main.c
#include <stdio.h>
int main()
{
 printf("hello world!");
 return 0;
}

2) CMakeLists.txt
PROJECT(HELLO)
SET(SRC_LIST ./main.c)
MESSAGE(STATUS "This is a BINARY dir " ${HELLO_BINARY_DIR})
ADD_EXECUTABLE(test ${SRC_LIST})     //引用变量用${}, 注意if中不用${}。

然后在文件夹下面执行命令:
cmake .

系统自动生成Makefile,然后make命令即可生成可执行文件test
./test即可运行。

注意:
CMakeLists.txt内容解释:
1)PROJECT(projectname [CXX] [C] [Java])
指定工程名称。指定工程支持的语言,默认支持所有语言。同时隐式的定义了两个cmake变量:
<projectname>_BINARY_DIR 和 <projectname>_SOURCE_DIR.
上面实例中就是:HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR.

小注:cmake系统预定义了PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR,跟上面两个内容是一致的,
以后建议直接用PROJECT前缀的,这样即使改变了工程名,也无碍。

2)SET(SRC_LIST main.c t1.c t2.c)     //显示定义变量

3)ADD_EXECUTABLE(test ${SRC_LIST})   //定义工程生成一个可执行文件test

小注:参数和变量是大小写相关的。 推荐全部用大写指令,如:ADD_EXECUTABLE、SET、PROJECT等等。

4)工程名HELLO和生成的可执行文件test是没有任何关系的。

5)清理工程:make clean       //即可对构建结果进行清理


2. 静态库和动态库的构建
1)mkdir lib;  cd lib;  touch hello.c hello.h

2)在lib中添加CMakeLists.txt:
SET(LIBHELLO_SRC ./hello.c)
SET(LIBRARY_OUTPUT_PATH /home/qinwg/qinwg/share)      //设置lib库输出路径
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})             //生成.so
ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC})             //生成.a
不需要写全libhello.so, 只需要写hello即可,cmake自动生成libhello.x

3)安装共享库和头文件
INSTALL(TARGETS hello DESTINATION /home/qinwg/qinwg/share/lib)
INSTALL(FILES hello.h DESTINATION /home/qinwg/qinwg/share/include)

------------------------------------------------------------------
文件夹中操作:
cmake .
make
make install
------------------------------------------------------------------

3. 使用库和头文件
PROJECT(TEST)                             //测试程序
SET(SRC_LIST ./main.c)            
INCLUDE_DIRECTORIES(../include)           //INCLUDE_DIRECTORIES包含头文件,让test可以找到头文件hello.h
LINK_DIRECTORIES(../lib)                  //添加非标准的共享库搜索路径
ADD_EXECUTABLE(test ${SRC_LIST})          //生成可执行文件test
TARGET_LINK_LIBRARIES(test hello)         //生成test需要链接hello库
#TARGET_LINK_LIBRARIES(test libhello.a)   //链接静态库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值