1、首先创建一个目录下的makefile

//main.cpp#include<iostream>using namespace std;int main(){   cout<<"Hello word!"<<endl;   return 0;}

在main文件所在的目录创建CMakeLists.txt

//CMakeLists.txtPROJECT(main)CMAKE_MINIMUM_REQUIRED(VERSION 2.8)AUX_SOURCE_DIRECTORY(. DIR_SRCS)ADD_EXECUTABLE(main ${DIR_SRCS})

PROJECT(main) 代表项目的名称是main

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)  代表CMake的最低版本是2.8

AUX_SOURCE_DIRECTORY(. DIR_SRCS) 将当前目录的源文件名赋值给DIR_SRCS

ADD_EXECUTABLE(main ${DIR_SRCS}) 将 变量${DIR_SRCS}中的文件编译成执行文件mian

执行 cmake CMakeLists.txt 会生成makefile文件。  之后执行make即可

2、首先多个目录下的makefile

上图为层级不同目录的层级关系

src目录下生成lib库文件,放在src目录下, main需要调用静态库

// main.cpp#include <iostream>#include "ModifyConfig.h" int main(){    TestCmake();    return 0;}
// ModifyConfig.cpp#include "ModifyConfig.h" void TestCmake(){    std::cout << "hello cmake " << std::endl}
// ModifyConfig.h#ifndef __MODIFY_CONFIG_H__#define __MODIFY_CONFIG_H__#include <iostream> void TestCmake(); #endif

以上是简单源码

然后我们在main.cpp所在目录创建CMakeLists.txt

// CMakeLists.txtcmake_minimum_required(VERSION 2.8) project(cmakeTest) aux_source_directory(. DIR_SRCS) include_directories(./include) add_subdirectory(src) add_executable(main ${DIR_SRCS}) target_link_libraries(main source_lib)

include_directories(./include)  设置包含目录, 这里代表包含 ./include的文件夹

add_subdirectory(src)  增加模块目录,  src文件夹就是一个新的模块, 文件夹内也要有对应的CMakeLists.txt文件

target_link_libraries(main source_lib)  指明可执行文件需要source_lib的链接库

再看src模块下的CMakeLists.txt

//CMakeLists.txtaux_source_directory(. DIR_SOURCE_SRCS)add_library(source_lib SHARED ${DIR_SOURCE_SRCS})

add_library(source_lib ${DIR_SOURCE_SRCS})   将变量${DIR_SOURCE_SRCS}中的文件编译成一个静态库 所在目录为当前文件夹下

可以看到source_lib对应的就是 上一次CMakeLists.txt中需要的链接库

准备工作完毕  在main.cpp所在目录执行 cmake CMakeLists.txt  会生成对应的makefile文件

生成前的目录

生成后的目录

可以看到在根目录和src目录下都生成了Makefile文件 , 其他的文件不用管。  我暂时还不知道什么用

之后在根目录下执行make即可

如果想生成动态库 则修改

add_library(source_lib ${DIR_SOURCE_SRCS})为

add_library(source_lib SHARED ${DIR_SOURCE_SRCS})

然后重新cmake即可

3、设置生成的库和执行文件的位置

LIBRARY_OUTPUT_PATH  设置库生成的默认路径

CMAKE_RUNTIME_OUTPUT_DIRECTORY  设置可执行文件生成的默认路径

// CMakeLists.txtcmake_minimum_required(VERSION 2.8) project(cmakeTest) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) aux_source_directory(. DIR_SRCS) include_directories(./include) add_subdirectory(src) add_executable(main ${DIR_SRCS}) target_link_libraries(main source_lib)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)  这一句就设置了可执行文件的生成路径为本文件夹下的bin目录

[转]CMake 生成makefile 步骤相关推荐

  1. linux c url下载文件,OpenCV教程之使用cmake生成MakeFile时下载文件

    在编译OpenCV以及其附加模块时,有时会需要一些第三方的库,如果本地没有,会自动下载,下载地址一般为GitHub,结果当然就是卡死在那里,根本无法下载,下面教大家如何解决这种问题. 问题重现 比如我 ...

  2. 【AI白身境】只会用Python?g++,CMake和Makefile了解一下​​​​​​​

    文章首发于微信公众号<有三AI> [AI白身境]只会用Python?g++,CMake和Makefile了解一下 今天是新专栏<AI白身境>的第六篇,所谓白身,就是什么都不会, ...

  3. 【AI白身境】只会用Python?g++,CMake和Makefile了解一下

    今天是新专栏<AI白身境>的第六篇,所谓白身,就是什么都不会,还没有进入角色. 对于大部分小白来说,因为python用的太爽,以致于或许都没有听说过CMake.python是脚本语言,而当 ...

  4. Ubuntu下使用cmake结合CmakeLists.txt生成makefile文件并进行编译

    转自1:https://www.cnblogs.com/cv-pr/p/6206921.html 转自2:https://blog.csdn.net/qqwangfan/article/details ...

  5. linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤

    前言 在Linux下,编译和链接需要用Makefile,而写好一个Makefile可不容易,写出一个规范的Makefile更是麻烦.我们可以利用autoconf来生成一个Makefile,尤其在大型工 ...

  6. CMake 常用总结二:CMake 生成静态库与动态库

    引言 CMake 实践帮助我们对 CMake 有一个系统全面的了解,并且有大量示例以供参考,至少在实际项目中可以让我们有能力看懂并修改项目中现有的 CMake . 阅读完 CMake 实践文档,认为自 ...

  7. 自动生成Makefile的全过程详解

    automake/autoconf入门 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefil ...

  8. 使用Automake和Autoconf生成Makefile

    automake 所产生的 Makefile 除了可以做到程序的自动编译和链接 外,还可以用来生成各种文档(如manual page.info文件),可以将源代码文件包装起来以供发布.所以程序源代码所 ...

  9. gcc、clang、make、cmake、makefile、CMakeLists.txt概念学习

    说明 编译器是翻译代码为计算机语言的一个工具,我们平时写的代码如果想在某个特定的计算机上执行(计算机的cpu构架不同),就需要编译器来对代码进行编译汇编链接,而汇编和链接的过程对于每个不同的平台上过程 ...

最新文章

  1. 37_04_awk入门进阶
  2. 获取界面url_PHP调用百度地图接口,根据IP地址获取地区
  3. 北漂周记--第2记--培训开始
  4. 基于semisync实现MySQL的主从半同步复制
  5. 《JavaScript权威指南》读书笔记一
  6. 对象转json字符串(带转义字符)
  7. 「软件项目管理」一文详解软件项目进度计划
  8. ajax java servlet_$.ajax(); 对应后台java servlet?
  9. flash写保护原理_Flash存储原理
  10. 大一html网页制作PPT,HTML网页制作.ppt
  11. 宝塔面板+PM2布署nodejs
  12. ubuntu 下安装 face_recognition
  13. php 生成条码插件,PHP版条码生成器
  14. pathon和c语言的区别
  15. 简单版捕鱼达人的制做
  16. 【Python基础学习一】在OSX系统下搭建Python语言集成开发环境 附激活码
  17. 软件复用及构件、C/S与B/S混合模型及实战项目技术简述
  18. 利用selenium库实现QQ空间点赞
  19. 是时候更新Android Studio 3.5了!不信,你看~
  20. 微软小娜关闭服务器,Win10关闭小娜服务的两个方法

热门文章

  1. 浏览网页时,手机显示手机被恶意攻击,不停震动,一直弹出应用要我下载,有没有问题?
  2. netkit-ng安装使用
  3. 适用于SQL Server的DBATools PowerShell模块
  4. SQL Server系统数据库–主数据库
  5. sql tempdb清理_SQL Server 2019中的内存优化的TempDB元数据
  6. sql数据库查询聚合函数_如何使用SQL Server数据质量服务确保正确的数据聚合
  7. 记事本开发者日记~二
  8. HDU1024 Max Sum Plus Plus
  9. 我的编程认知:多思考、多编码、多测试
  10. 图解 MongoDB 地理位置索引的实现原理