CMake学习

1.ifndef等的用法

   http://baike.sogou.com/v7669863.htm?fromTitle=%23ifndef

2.CMake 的较完整演示

   http://www.hahack.com/codes/cmake/

3.需要掌握的CMake制作

  http://blog.csdn.net/weicao1990/article/details/72844995

  http://www.linuxidc.com/Linux/2014-03/98622.htm(最有用链接hy:cmake设置交叉编译环境)

实例如下:

1. 建立如下目录

 

2. Src中包含

 

3. 分别执行以下命令,得到相应源文件及src中的CMakeLists.txt

 

main.cpp

 

Lib_demo.cpp

 

CMakeLists.txt

 

4. 根目录下的CMakeLists.txt

 

5. include目录下文件如下

 

main.h

 

lib_demo.h

 

6. 接下来在build文件中执行cmake.. ,若编译通过,再执行make,这样在bin下生成了可执行文件,就是我们在src中的CMakeLists.txt申明的Demo,在bin目录下./Demo,就可以输出内容

注:1. lib下存放生成的库(静态库和动态库,此实例下为空

    2. build目录下会生成一些新文件

补充:

若在src目录下的CMakeLists.txt加入静态库和动态库,则在lib中会出现相应的库文件

 

Kdevelop的学习

Cmake更深入的例子:

MP3播放功能:

1.MP3文件中目录如下:

 

其中具体内容如下:

 

在src中存放源文件,include中存放头文件,bin下存放可执行文件,build下执行cmake..和make命令。

注意:

1. List_and_play.c是最基层文件,这里称为一级文件,在main.c和play.c中都会用到List_and_play.c中的函数或者变量;play.c是二级文件,在main.c中会用到play.c中的函数; main.c是三级文件,调用List_and_play.c 和play.c中的函数及变量;

2.头文件.h文件中一般存放一些结构(如struct结构和class等)和源文件的函数体声明,一般不存放变量,否则变量一旦被修改,在源文件的使用则会受到影响;

3.一个源文件除了需调用本源文件的头文件外,当用到其他源文件时,需调用其他源文件的函数体,这里故调用其他源文件的头文件;

4.一般不声明全局变量,若声明了,一般在main.c中进行全局声明,在具体函数中用到的时候,需采用extern关键字对其再次申明,如extern int a;

5.函数中的标准头文件一般只写在本函数中用到的;

源文件 list_and_play.c , play.c和main.c, 的一部分代码依次如下:

List_and_play.c : 这里有两个函数,开始播放函数和播放函数 

Play.c函数:这里有暂停函数,停止函数,继续函数,上一首函数,下一首函数

 

Main.c函数如下:用来调用开始播放函数,播放函数,暂停函数,停止函数,继续函数等

 

 

Src下的CMakeLists.txt如下:

 

第一行:查找当前目录下的所有源文件,并将名称保存到DIR_SRCS目录;

第二行:指定头文件目录,并且指明头文件存放在include下;

第三行:指定可执行文件的输出目录,输出到bin下;

第四行:生成目标函数MP3song。

接下来,看include下的文件:

 

MP3下的CMakeLists.txt如下

 

综上,在bin文件下就会生成MP3的可执行文件MP3Song。

MP3例子详解:

为什么不用子进程直接播放,当时我也在思考这个问题,但是当我修改这个程序本身的BUG后,我明白了。我想是因为如果使用子进行调用execl族函数进行播放了,execl族函数的特点是删除本身进程的函数,执行execl的函数,那么父进程必然要使用wait函数等待子进程,执行完成后,切换到下一首歌曲,那么父进程又怎么去检测按键嗯? 

播放标识play_ flag

只有当play_ flag=1 时,才可以执行暂停函数实现暂停功能;

当play_ flag=0 时,才可以执行暂停函数实现继续播放功能;

First_ key = 1表示是首次播放

Play.c中的上一首和下一首函数中,为什么需要杀死两个进程,即子进程和孙子进程?

答:子进程是播放函数的调用,孙子进程是播放函数的具体实现.

Wait(NULL)是等待子进程和孙子进程结束,再调用下面的播放上一首或下一首函数

 

创建共享内存时,映射使得将创建的共享内存映射到具体的地址空间中。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值