3.1在同一个目录下有多个源文件

3.1.1简单版本

3.1.1.1项目结构
同一个目录下有如下文件
main.cpp
funa.cpp
funa.hpp
3.1.1.2示例代码

首先在同一个目录下创建以下文件

touch funa.hpp funa.cpp

funa.hpp内容如下

extern void funa(int a);

funa.cpp内容如下:

#include<stdio.h>
#include"funa.hpp"
void funa(int a){
    printf("a=%d\n",a);
}

main.cpp内容如下:

#include<iostream>
using namespace std;
#include"funa.hpp"
int main(){
    cout<<"hello world!"<<endl;
    funa(100);
    return 0;
}

CMakeLists.txt内容如下:

3.1.1.3运行如下:

运行成功!

可以类推,在同一目录下有多个源文件,只要在add_executable里把所有源文件都添加进去即可,

但是如果有100个文件,在这样就有点麻烦了。无法体现cmake的优越性,但是cmake提供换了一个命令可以把指定目录下的所有文件存储在一个变量中,这个命令是:

aux_source_directory(dir var)

第一个参数dir就是指定目录,第二个参数var是用于存放源文件列表的变量。

接下来写一个进阶版的demo使用该变量

3.1.2进阶版本

3.1.2.1项目结构
同一目录下项目结构
main.cpp
funa.cpp
funb.cpp
funa.hpp
funb.hpp
CMakeLists.txt

3.1.2.2示例代码

funb.hpp内容如下:

#ifndef FUNB_HPP
#define FUNV_HPP
void funb(int b){
    printf("b=%d\n",b);
}
#endif

funb.cpp内容如下:

#include<stdio.h>
#include"funb.cpp"
void funb(int b){
    printf("b=%d\n",b);
}

main.cpp内容如下:

#include<iostream>
using namespace std;
#include:funb.hpp"
#include"funa.hpp"
int main(){
    cout<<"hello world!"<<endl;
    funa(100);
    funb(50);
    return 0;
}

CMakeLists,txt内容如下:

3.1.2.3 运行查看

先执行cmake和make 后运行 ./main

可以看到运行成功了!!!!

aux_source_directory()也存在弊端,他会把指定目录下的所有源文件都加进去,可能会加入一些我们不需要的文件,此时使用set命令去新建变量来存放需要的源文件,如下:

cmake_minimum_required(VERSION 3.0)
project(demo)
set(SRC_LIST ./main.cpp ./funa.cpp ./funb.cpp)
add_executable(main ${SRC_LIST})

3.2在不同目录下有多个源文件

3.2.1项目结构

同一目录下项目结构
CMakeLists.txt
main.cpp
另一目录结构下
funb.hpp
funa.hpp
另一目录结构下
funb.cpp
funa.cpp

3.2.2示例源码

cmake_minimum_required(VERSION 3.0)
project(demo)
include_directories(tfuna)
aux_source_directory(tfunb SRC_LIST)
add_executable(main main.cpp ${SRC_LIST})

3.2.3运行查看

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐