使用cmake生成可执行文件以及开发中常用到的一些指令说明

#include <iostream>
#include <thread>
using namespace std;

void ThreadFunc(){
    this_thread::sleep_for(chrono::milliseconds(100));
    cout<<"this thread fun over"<<endl;
}

int main(){
    thread t(ThreadFunc);
    t.join();
    return 0;
}

假设我们需要编译这样一段代码,如果在命名行完整的写完一条编译指令,大概是下面这个样子的,看起来很长,也很繁琐的样子。

g++ -o main -g main.cpp -l/usr/include -L/usr/lib -lpthread -std=c++11 -DHELLO
  1. -o:执行生成可执行文件的名称;
  2. -g:生成debug版本的可执行文件,不加默认为release版本;
  3. -l:指定头文件的搜索路径;
  4. -L:指定库文件的搜索路径;
  5. -lxxx:"xxx"指的是动态库的名字,这样写我们需要链接的动态库;
  6. -D:如-DHELLO,其中HELLO是宏名,表示编译时将这个也编译到程序中。
int main()
{
    #ifdef HELLO
    printf("HELLO defined !\n");
    #else
    printf("HELLO not define!\n");
    #endif
    return 0;
}

如果我们在编译的时候 g++ -DHELLO,可执行程序运行以后打印出"HELLO defined ".

不过,一般来讲系统的头文件和库是不需要我们指定的,这样写出来是为了更加的直观。

接下来,我将上面的那条看起来有点乱的编译指令改写成一个一目了然,通俗易懂的cmake语句。

#CMakeLists.txt
cmake_minimum_required(VERSION 3.5) #指定cmake的最小的版本

project(test) #为当前的工程起名,不是可执行文件名

set(CMAKE_BUILD_TYPE "Debug")#设置debug模式,如果没有这一行将不能调试设断点

#配置编译选项 如 -g等,具体可以搜索都支持哪些选项
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g -O -Wall -std=c++11)

#可以给一个路径起一个变量名,PROJECT_SOURCE_DIR:工程的根目录
set(A_MODULE_PATH ${PROJECT_SOURCE_DIR}/Path1/Path2)

#配置头文件搜索路径,比如将包含A_MODULE_PATH路径下的头文件 
include_directories(${A_MODULE_PATH}/include1/
					${A_MODULE_PATH}/include2/
)

#配置库的搜索路径,再比如引用链接A_MODULE_PATH路径下的库文件 
link_directories(${A_MODULE_PATH}/lib1/
				 ${A_MODULE_PATH}/lib2/
)

#设置需要编译的源文件列表
set(SRC_LIST a.cpp b.cpp e.cpp main.cpp) #等同于将a.cpp b.cpp e.cpp main.cpp保存到SRC_LIST变量中

#生成可执行程序,等同于将指定的源文件生成指定名称的可执行程序,可执行文件名为main
add_executable(main ${SRC_LIST})#适用于源文件比较少的情况,否则需要一一添加

#搜索指定路径下的所有源文件,并且保存在变量中
#适用于源文件特别多的的情况,一一将所有源文件列举不现实,自动搜索指定路径下的所有源文件
aux_source_directory(. SRCS_LIST)

#可执行文件链接库
target_link_libraries(main pthread lib1 lib2 lib3) 
#不需要添加-l,但是等同于命令行的-l,cmake会自动添加
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值