[unix]用cmake写hello world

cmake

cmake:开源库跨平台编译,测试,打包工具。主要是通过使用平台独立配置文件来产生配置文件以及生成基于平台的makefile来控制软件的编译过程。
cmake可以:
1. 能够自动寻找软件所需要的程序,库文件,头文件等。这些文件可能因为平台的不同而不同。
2. 能够独立于源代码文件夹,在其他地方生成build文件。
3. 能够生成复杂,可控的版本文件。
4. 有选择的控制编译所需要的文件。
5. 方便的在共享库和静态库间切换。
6. 依据平台生成makefile。

基础的cmake用法以及语法

要使用cmake非常简单,只要新建若干个CMakeLists文件就能控制编译过程。CMakeLists文件需要包含对于如何构建该项目的描述。这些语句成为一系列的指令(command),有着如下的形式:

command (args...)
command是指令的名称,而args则是由白字符分割的一串参数。cmake是大小写不敏感的。

cmake 支持简单变量,变量可以通过使用像${VAR} 的语法来引用。当然也可以为一个变量设置多个参数成为一个参数组,比如
set(Foo a b c)
就将Foo这个变量设置为a b c,这样就能将命令写成如下形式:
command("${Foo}") 等同于 command("a b c")
系统变量可以通过这种形式访问到。

Hello World cmake 0.1版

#include <stdio.h>


int main(int argc, char **argv)
{
    printf("hello world!\n");
    return 0;
}

要生成生成这么简单的一个可执行文件只需要在CMakeLists.txt中加上两句

project(hello)
add_executable(hello hello.c)

然后在当前目录下

$ cmake .
$ make
$ ./hello

即可看到效果了。

project命令指明了工作空间以及随后add_executable命令将可执行目标添加进构建过程。

Hello World cmake 0.2版

这一版本中,我们将hello world程序打散,拆成多个文件。
hello.c

#include <stdio.h>

int main(int argc, char** argv)
{
    say_hello();
    return 0;
}

func.c

void say_hello()
{
    printf("hello world!\n");
}

这一次我们发现say_hello函数将打印出hello world,而该函数则在独立的func.c文件中存在
这次我们CMakeLists.txt中变成了这样

project(hello)
add_executable(hello hello.c func.c)

Hello World cmake 0.3版

在本版的基础上,我们将加入跨平台支持。
hello.c

#include <stdio.h>


int main(int argc, char **argv)
{
    hello_all();
    say_hello();
    return 0;
}

hello_all为全平台支持函数,而say_hello依据平台不同而有不同表现。
func_all.c 全平台支持实现

void hello_all(){
    printf("hello world,my friends.\n");
}

func_app.c/func_uni.c/func_win.c

void say_hello(){
    printf("hello world,apple\n");
    //printf("hello world,linux\n"); uni.c
    //printf("hello world,windows\n"); win.c
}

最后我们的CMakeLists.txt文件则需要一点点的逻辑判断,判断哪些是文件是需要被编译进执行程序的。


                
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值