首页 > 其他分享 >工程开发 | CMake工程目录结构和多线程

工程开发 | CMake工程目录结构和多线程

时间:2023-07-14 09:23:23浏览次数:48  
标签:src CMakeLists txt CMake 工程 void pthread main 多线程

CMake工程目录结构

lib: 生成的库文件
src: 源文件(.cpp .cc)
include: 头文件(.h .hpp)
build: 一般在这个文件夹下执行cmake ..(..之前有一个空格,表示你要使用的CMakeLists.txt文件在当前的上层路径),生成的Makefile文件也在这个路径下。
bin: 一般放生成的可执行文件
CMakeLists.txt: cmake的配置文件,关于配置文件怎么写的教程
http://blog.csdn.net/kaizi318/article/details/7721624)

我的CMakeLists.txt是这样写的:

#井好表示注释
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定最小版本号
PROJECT( test )                       #设定工程名

SET(CMAKE_CXX_COMPILER "g++")         #设置编译器(可选的有gcc,g++)

# 设置用debug还是release模式。debug允许断点,而release更快
#set( CMAKE_BUILD_TYPE Debug )
set( CMAKE_BUILD_TYPE Release )

# 设置编译选项
# 允许c++11标准、O3优化、多线程。match选项可避免一些cpu上的问题
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread" )

#设定可执行二进制文件的目录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 
#设定存放编译出来的库文件的目录
SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) 
#并且把该目录设为连接目录
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
#设定头文件目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
#增加子文件夹(注意我们的src路径是通过子文件夹的形式添加的,在这里面也是可以些CMakeLists.txt的)
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)

多线程

进程是分配资源的基本单位,线程是轻量级的进程,为什么是轻量级的,因为线程是依附进程而存在的,共享进程的资源,线程之间切换比进程切换更加快速。
教程链接1:http://www.runoob.com/cplusplus/cpp-multithreading.html
教程链接2:http://www.cnblogs.com/haippy/p/3284540.html

新建 src/CMakeLists.txt

##src/CMakeLists.txt
ADD_EXECUTABLE( main  main.cpp )

新建 src/main.cpp

//src/main.cpp
#include<iostream>  
#include<pthread.h>  
#include<unistd.h>  

using namespace std;
__thread int i = 1;

void* thread1(void* arg);
void* thread2(void* arg);

int main()
{
    pthread_t pthread1;
    pthread_t pthread2;
    pthread_create(&pthread1, NULL, thread1, NULL);
    pthread_create(&pthread2, NULL, thread2, NULL);
    pthread_join(pthread1, NULL);
    pthread_join(pthread2, NULL);
    return 0;
}
void* thread1(void* arg)
{
    cout<<++i<<endl;             //输出 2  
    return NULL;
}
void* thread2(void* arg)
{
    sleep(1);                 //等待thread1完成更新
    cout<<++i<<endl;          //输出 2,而不是3
    return NULL;
}

需要特别解释的是:__thread是gcc,g++内置的用于多线程编程的基础设施。用__thread修饰的变量,每个线程都拥有一份实体,相互独立,互不干扰

最后进入build路径,执行下面命令:

$ cmake ..
$ make
$ ../bin/main

标签:src,CMakeLists,txt,CMake,工程,void,pthread,main,多线程
From: https://www.cnblogs.com/RioTian/p/17552782.html

相关文章

  • goland打开配置golang工程
    有一个golang工程,没有go.mod,用goland打开,配置编译,会提示没有go.mod,但是增加了go.mod,又提示工程目录下引用的包找不到。去掉go.mod先把go.mod关闭把工程目录加入GOPATH......
  • 多线程基础
    1.继承Thread类重写run方法启动调用start方法缺点不能继承其他类优点简单2.定义任务类继承 Runnable接口实现 run方法   MyRunable为自定义的任务类 优点可以继承其他类 Runnablet=newMyRunable();newThread(t).start();3.JDK5.0提供了C......
  • CMake使用
    makefile依赖于不同编译平台,CMake可以跨平台。通过编写CMakeLists.txt文件,执行cmake命令,就可以自动生成对应平台的makefile文件,再执行命令make就能进行编译语法变量使用${}取值,if语句中直接使用变量名指令格式为:指令(参数1参数2),指令大小写无关,参数和变量大小写相关基本指令......
  • 理解软件自带的easy工程(二)
    继续分析Light的代码/*@@msg:CAN1.easy::LightState(0x321):*/onmessageLightState{if(this.dir==TX){gDebugCounterTX++;if(gDebugCounterTX==10){writeDbgLevel(1,"LightStateTXreceivedbynode%NODE_NAME%");gDe......
  • 高级工程师退休待遇
      现在退休,都是按照缴费年限,缴费基数,个人账户,以及退休年龄,社会平均工资计算的,不考虑职务和职称,没有任何补贴,不管是什么人,都是一样的计算办法,在平时工作中,高级职称的人员,已经领取高级职称的工资,并且按照高级职称的工资缴纳了养老保险,缴费基数越高,领取的养老金越高,因此,在计算退......
  • 理解软件自带的easy工程(一)
     1.数据库 有三个网络节点,两个报文,四个信号,其中EngineState报文发送两个信号:EngineSpeed,OnOff。LightState发送FlashLight,HeadLight两个信号。OnOff信号是valuetable型。双击Display节点 所有信号都是它的接收信号。2.系统变量 3..面板设计     ......
  • SpringBoot中使用Netty开发WebSocket服务-netty-websocket-spring-boot-starter开源项
    场景SpringBoot+Vue整合WebSocket实现前后端消息推送:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114392573SpringCloud(若依微服务版为例)集成WebSocket实现前后端的消息推送:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114480731若依前后......
  • 软件工程与计算II-24-考试总结
    summary1.软件工程应用系统的、规范的、可量化的方法来开发、运行和维护软件,即将工程应用到软件。对1)中各种方法的研究。2.五十年代到00年代的特点1950s:科学计算;以机器为中心进行编程;像生产硬件一样生产软件。1960s:业务应用(批量数据处理和事物计算);软件不同于硬件;用软件工艺的......
  • 岩土工程振动在线监测:以道路桥梁基础为例
    岩土工程振动在线监测:以道路桥梁基础为例使用振弦传感器、采集仪和在线监测系统进行岩土工程监测:以道路桥梁基础振动监测为例一个应用振弦传感器、振弦采集仪和在线监测系统构成的岩土工程监测案例是道路桥梁基础的振动监测。 在道路桥梁基础的振动监测方面,振弦传感器可以用......
  • Java入门12(多线程)
    多线程线程的实现方式继承Thread类:一旦继承了Thread类,就不能再继承其他类了,可拓展性差实现Runnable接口:仍然可以继承其他类,可拓展性较好使用线程池继承Thread类​ 不能通过线程对象调用run()方法,需要通过t1.start()方法,使线程进入到就绪状态,只要进入到就绪状态......