CMake 生成makefile 步骤

news/2024/6/19 2:43:55 标签: cmake, makefile, centos

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

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

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

//CMakeLists.txt
PROJECT(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.txt
cmake_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.txt
aux_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.txt
cmake_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目录

 


http://www.niftyadmin.cn/n/1166700.html

相关文章

PE结构(DOS,NT,SectionHeader 不含 DataDirectory)一

PE结构&#xff1a;所有的可执行文件都要满足PE文件建构 我这里就以内存图的形式展示一下pe结构 上图为pe的简单内存结构图 1.DosHeader 结构 这里我仅说明我常用到的成员。 struct _IMAGE_DOS_HEADER { 0x00 WORD e_magic; // 记录是否是可执行文件 0x02 W…

hadopp 环境搭建

我的配置 我在虚拟机中设置了三个实例&#xff0c;以下是它们的名字 s1&#xff1a;master s2&#xff1a;slaves3&#xff1a;slave 虚拟机的网络配置 配置固定 IP vi /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.191.128 netmask 255.25…

hadoop 的命令

维护的命令 start-all.sh/stop-all.sh&#xff1a;启动/关闭所有&#xff0c;包括 nodeName、dataNode、secordaryNode、resourcManage(yarn)&#xff0c;不过&#xff0c;这两个命令已经废弃了&#xff0c;所谓长江后浪推前浪&#xff0c;下面来看一下新秀命令stop-dfs.sh/st…

自动运维的脚本分析

发现的脚本 boot_all.sh 下面的脚本完成了两个任务 将脚本执行机器对其他的服务器免登陆将 install.sh 脚本复制到其他的服务器&#xff0c;并且执行 #!/bin/bashSERVERS"$1" PWD123 BASE_SERVERserver1auto_ssh_copy_id(){expect -c "set timeout -1;// ex…

多线程实现互斥访问对象的方法

场景说明 假设有 A、B 两个线程都去调用对象 α 的方法 method1(),并且要求 A、B 两个线程是互斥调用 method1 的。具体来说&#xff0c;假设 method1 中有 4 个命令&#xff0c;一旦 A 调用了 method1&#xff0c;在执行 method1 中有 4 个命令的时候&#xff0c;B 不会调用 …

HDFS 架构官文理解

HDFS 使命 实现硬件级别的容错提供数据流方式的访问文件提供超大数据量的存储&#xff0c;GB、TB、PB&#xff0c;这其中还包含了访问速度的要求。实现简单的一致性&#xff0c;为了保证整个集群里面不同副本之间的数据是一致的&#xff0c;所以 HDFS 只之支持了文件简单的文…

自己封装的MR类

简介 自己在练习 MR 的时候&#xff0c;重复的操作的代码比较多&#xff0c;于是灵机一动&#xff0c;自己何不写一个代理类&#xff0c;把 Maper、reducer、partitioner 等方法封装到一起。 所以就有了下面这个类。 MR 代理类 自己写的 MR 的代理类&#xff0c;能给自己省…

模拟 DB 的 sum

现有集合&#xff1a; var m2 Map("name" -> "wang","sex" -> "1","dep" -> "it","salary" -> 2000)var list3 List(m2,m2,Map("name" -> "yi","sex" …