cmake安装

本人的机器为ubuntu 10.04,在连网的情况下直接在终端输入:

root@zsh-linux:~#apt-get install cmake  

安装完毕之后可以在/var/cache/apt/archives看到安装的.deb文件

或者在cmake官网下载cmake for linux

此时有个注意点是建议下载 cmake-2.8.4.tar.gz 而不是cmake-2.8.4-Linux-i386.tar.gz

下载完成后解压

root@zsh-linux:/opt#tar -zxvf  cmake-2.8.4.tar.gz
root@zsh-linux:/opt# cd cmake-2.8.4
root@zsh-linux:/opt/cmake-2.8.4#
root@zsh-linux:/opt/cmake-2.8.4# ./bootstrap
root@zsh-linux:/opt/cmake-2.8.4# make
root@zsh-linux:/opt/cmake-2.8.4# make install   

安装完毕后查看是否安装成功:

root@zsh-linux:/opt/cmake-2.8.4# cmake --version  cmake version 2.8.4  

有以上信息表示安装cmake成功。

cmake 的使用

(1)创建一个工程目录文件夹,然后创建一个hello.c

#include<stdio.h>
int main()
{  printf(“hello,this is my first using cmake project/n”);  return 0;
}  

(2)然后创建一个build目录(用于编译生成的相应文件),与hello.c目录同级

(3)编写CMakeLists.txt内容如下:(于hello.c目录同级)

 cmake_minimum_required(VERSION 2.8)  PROJECT(cmake_test)  SET(SRC_LIST main.c)  INCLUDE_DIRECTORIES(/usr/include/glib)
MESSAGE(STATUS "This is BINARY dir "${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})  

(4)进入build目录输入 cmake ..

root@zsh-linux:/home/cmake_test/build# cmake ..  

若编译成功在build目录下会生成相应文件,其中有个makefile文件

有可能会出现问题:

CMAKE_CXX_COMPILER-NOTFOUND" was not found

解决方法:

root@zsh-linux:/home/cmake_test/build# apt-get install g++  (可选)cmake -D CMAKE_CXX_COMPLIER=”g++”CMAKE -D     CMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=”/usr/local”  

(5)输入make 命令执行成功后在build目录下会看到可执行的hello

(6)./hello

输出 hello,this is my first usingcmake project。

注:这只适用于简单的工程,若复杂的工程项目请参考www.cmake.org

你觉得makefile看着就头痛,如果当工程越来越大,你越来越手足无措,如果你厌倦了在编译的时候打上一大堆命令,那么你有必要花十分钟来看一下下面的内容。

一、HelloWorld

首先创建一个test1文件夹,里面创建一个main.c文件,内容如下:

#include <stdio.h>
int main()
{printf("Hello World!\n");return 0;
}

再创建一个CMakeLists.txt

PROJECT (HELLO)
SET(SRC_LIST main.c)
ADD_EXECUTABLE(hello ${SRC_LIST})

第一行:设置项目名称;

第二行:将SRC_LIST值设置为main.c

第三行:生成可执行文件 hello。 ${} 是引用某个值。

Terminal中cd进入到test1目录,创建一个build目录用于外部构建(编译所产生的文件都生成在build目录),依次执行下面三条命令:

cmake ..
make
./hello

得到的结果如下:

如果要引用内部库的话,比如是关于SDL和opengl的程序,需要在CMakeLists.txt中添加

TARGET_LINK_LIBRARIES(hello SDL)
TARGET_LINK_LIBRARIES(hello GLU)

对应终端的编译命令就是:

-lSDL -lGLU

若不是引用内部库,则需要将相应目录添加进来,用到的是INCLUDE_DIRECTORIES命令。

二、库的构建与安装

这次我们的目标是:

1,建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用,HelloFunc 向终端输出

Hello World 字符串。

2,安装头文件与共享库。

目录安排如下:

build-用于外部编译;

libhello-hello库的源文件;

src-主程序

首先看libhello里的文件:

/*filename:hello.h*/
#ifndef DBZHANG_HELLO_
#define DBZHANG_HELLO_
void hello(const char* name);
#endif //DBZHANG_HELLO_/*filename:hello.c*/
#include <stdio.h>
#include "hello.h"void hello(const char * name)
{printf ("Hello %s!\n", name);
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
set(LIB_SRC hello.c)
add_library(libhello STATIC ${LIB_SRC})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
install(TARGETS libhello
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(FILES hello.h DESTINATION include/hello)

src文件夹

/*filename:main.c*/
#include "hello.h"
int main()
{hello("Jack");return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
include_directories(${PROJECT_SOURCE_DIR}/libhello)
set(APP_SRC main.c)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
add_executable(main ${APP_SRC})
target_link_libraries(main libhello)

最外面的CMakeLists.txt

project(HELLO)
add_subdirectory(src)
add_subdirectory(libhello)

解释:

除build目录外每一个目录都要建立一个CMakeLists.txt.

生成库的语句:add_library(libhello STATIC ${LIB_SRC})

这条语句是建立静态库,若要建立动态库的话将STATIC改成SHARED.

install命令负责库的安装。

make一下,结果就像这样:

再sudo make install.

安装好库之后,我们在想使用hello方法的时候,只要添加头文件#include就可以了,编译的时候

g++ main .c -o main -lhello

就可以引用我们编译好的库了。

Linux cmake使用入门相关推荐

  1. CMake指令入门 ——以构建OpenCV项目为例

    CMake指令入门 --以构建OpenCV项目为例 转自:https://blog.csdn.net/sandalphon4869/article/details/100589747 一.安装 sud ...

  2. cmake 从入门到入土

    为什么需要CMake 你或许听过好几种 Make 工具,例如 : GNU Make QT 的 qmake 微软的 MS nmake BSD Make(pmake)Makepp 这些 Make 工具遵循 ...

  3. linux运维入门第一周的学习部分命令!

    linux运维入门一周后,部分常用命令. { 逻辑靠思维,命令全靠记!} / 根分区 代表分区的根 alias 别名命令 例如:alias NAME='VALUE' cat /etc/ centos- ...

  4. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  5. linux内核二当家,Linux PWN从入门到熟练(二)

    前言 上回说到,如何利用程序中system函数以及bin/sh字符串来进行pwn.这里我们会介绍,如何在栈可执行而system函数以及参数没有的情况下,如何自己布置payload进行pwn.此外,还提 ...

  6. Linux之Ansible入门用法(实验解析)

    Linux之Ansible入门用法(实验解析) 实验前提: 三台CentOS7和一台CentOS6,其中一台CentOS7当作Ansible堡垒机,其余三台主机当作被控主机.四台主机均为最小化安装,全 ...

  7. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

  8. arm嵌入式linux应用实例开发pdf,零点起步——ARM嵌入式Linux应用开发入门一书的源代码...

    代码片段和文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 文件      2 ...

  9. linux cmake变量,linux – CMake错误:此项目中使用了以下变量,但它们设置为NOTFOUND...

    我正在尝试使用tar文件whalebot-0.02.00.tar.gz配置whalebot爬虫.我已正确提取它: root@Admin1:~/dls# tar xvzf whalebot-0.02.0 ...

最新文章

  1. 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习第一章...
  2. SharePoint 2013中的视频体验增强(1)——把大象装进冰箱
  3. idea java编译报错_intellij-idea,java_idea 编译报错,intellij-idea,java - phpStudy
  4. DataGrid双向排序以及给HeaderText加图标
  5. 类与类之间调用Computer-CPU-Mouse--看懂它看懂类之间的调用
  6. ubuntu安装linux deepin,如何在Ubuntu中安装Deepin终端 | MOS86
  7. Div1 小A抓小B tarjan双连通分量缩点+dfs
  8. linux关闭自动更新,Ubuntu开启系统自动升级与取消自动更新的方法,
  9. 阶段3 2.Spring_09.JdbcTemplate的基本使用_1 今日课程内容介绍
  10. 腾讯产品能力框架之通用能力篇(一)学习能力
  11. Layui 内置方法 - layer.style(重新定义层的样式)
  12. iphone 屏幕大小及计算
  13. OSPF中双ASBR重发布5类LSA问题
  14. 歪门邪道之解决首屏图片加载闪烁问题
  15. android-5.0新功能介绍(Lollipop)
  16. 凡是过往,皆为序章,致敬2021,迎接2022!
  17. layui-tree实现Ajax异步请求后动态添加html元素
  18. 微信小程序引入echarts图表(保姆式)
  19. Python 内置界面开发框架 Tkinter入门篇 丁
  20. Verilog语言实现设计交通灯控制器

热门文章

  1. C# 对字符进行UrlEncode/UrlDecode
  2. Java面向对象之继承,方法重写,super关键字,员工类系列继承题
  3. 【转】strlen源码
  4. clojure 中使用 actor
  5. [黑金原创教程] FPGA那些事儿《数学篇》- CORDIC 算法
  6. 关于ORACLE RAC心跳问题的释疑
  7. 第一章 用户及组的管理
  8. Linux下SVN命令总结
  9. 加密和解密算法 Asp.net
  10. 在ASP.NET Core应用程序中使用分布式缓存