Makefile的应用——进度条实现

本文介绍如何在CentOS 6.5环境下使用Makefile构建一个简单的进度条程序。通过编写C语言代码,并利用Makefile定义编译规则,最终实现了一个可以在终端显示进度条的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Makefile:一个工程中的源文件不计数,其按类型,功能、模块分别放在若干目录中,makefile定义一系列的规则来指定,那些文件需要先编译,那些文件后编译,那些文件重新编译,甚至于进行更复杂的功能操作。make是一个命令工具,是一个解释makefile中指令的命令工具。

下面将演示如何在centos6.5下进度条的实现:

  在命令行输入 touch process.c ;新建立一个.c文件

  在命令行输入vim Makefile   ;建立目录Makefile 进入编辑如下图:


然后vim process.c:编写实现进度跳的代码


ESC:wq退出!保存并退出。

命令行输入:make 回车,就会生成一个 process文件,

接着./process就会观察到进度条。

疑问:对于换行的问题 读者可以将字体调小,以便观察。

对如上函数,读者也可进入VS,VC6.0进入编辑,亦可实现!


### 使用Qt Widgets Application模板开发48kHz 16-bit PCM音频播放器 #### 创建Qt Widgets Application项目 为了创建一个新的Qt Widgets应用程序,在Qt Creator中选择“New Project”,然后选择“Qt Widgets Application”选项[^2]。 #### 添加FFmpeg依赖 由于目标是播放PCM音频,需要集成FFmpeg库来进行音频解码和处理。确保在项目的`.pro`文件中添加必要的链接库: ```makefile LIBS += -lavcodec -lavformat -lswresample INCLUDEPATH += /path/to/ffmpeg/include DEPENDPATH += /path/to/ffmpeg/lib ``` #### 设计UI界面 利用Qt Designer工具设计简洁直观的用户界面,至少应包含启动播放按钮、停止按钮以及进度条等基本控件。这些可以通过拖拽方式轻松完成布局设置。 #### 编写核心逻辑代码 下面是一个简化版的例子展示如何读取并播放指定参数下的PCM数据流(假设已经准备好相应的pcm_data缓冲区): ```cpp #include <QAudioOutput> #include <QIODevice> class AudioPlayer : public QObject { Q_OBJECT public: explicit AudioPlayer(QObject *parent = nullptr); private slots: void startPlayback(); void stopPlayback(); private: QAudioOutput* audio_output; }; AudioPlayer::AudioPlayer(QObject *parent):QObject(parent),audio_output(nullptr){ } void AudioPlayer::startPlayback(){ // 配置音频格式为48KHz, 16位, 单声道 QAudioFormat format; format.setSampleRate(48000); // 设置采样率为48kHz format.setChannelCount(1); // 设置通道数为单声道 format.setSampleSize(16); // 设置样本大小为16比特 format.setCodec("audio/pcm"); // 设置编解码器类型为PCM format.setByteOrder(QAudioFormat::LittleEndian); // 小端字节序 format.setSampleType(QAudioFormat::SignedInt); // 符号整型表示法 // 初始化音频输出对象 audio_output = new QAudioOutput(format,this); connect(audio_output,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stopPlayback())); QByteArray buffer; // 存储待发送的数据包 const int chunk_size=480*sizeof(short);// 每次传输480个sample对应的bytes数量 while(/*条件判断是否有更多数据*/true){ short pcm_chunk[chunk_size]; // 定义一个固定长度的数组存储当前要发送的声音帧 /*填充pcm_chunk[]的内容*/ buffer.append((char*)pcm_chunk,sizeof(pcm_chunk)); if(buffer.size()>=chunk_size){ // 当缓存中的数据达到一次发送量时发出 audio_output->write(buffer.data(),buffer.size()); buffer.clear(); // 清空已发送部分以便下次循环使用 } } audio_output->start(); } void AudioPlayer::stopPlayback(){ if (audio_output != nullptr && audio_output->state()!=QAudio::StoppedState) { audio_output->stop(); delete audio_output; audio_output=nullptr; } } ``` 此段代码展示了如何定义一个名为`AudioPlayer`的对象来管理音频回放过程,并设置了特定的音频属性以匹配所需的规格——即每秒48千赫兹、每个样本占两个字节(16位)、每次处理480个短整型样本[^1]。 #### 测试与优化 构建完成后可以在模拟环境中运行程序验证其功能是否正常运作。根据实际需求调整细节之处如错误处理机制、用户体验改进等方面的工作直至满意为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值