M2 编译多个源文件
但是如果有100个文件,在这样就有点麻烦了。可以类推,在同一目录下有多个源文件,只要在add_executable里把所有源文件都添加进去即可,第一个参数dir就是指定目录,第二个参数var是用于存放源文件列表的变量。先执行cmake和make 后运行 ./main。接下来写一个进阶版的demo使用该变量。首先在同一个目录下创建以下文件。可以看到运行成功了!funa.hpp内容如下。3.1.2.2
·
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运行查看

更多推荐


所有评论(0)