target:dependency dependency [...]
command
command
[...]
解释:target表示make执行的目标
dependency表示执行该目标时需要依赖的对象,对象之间用空格隔开
command 表示执行目标的命令
注意:
所有command行之前键入一个tab,否则make makefile文件时会报错
下面我们来看一个简单的bubblesort.c程序
#include <stdio.h>
void bubbleSort( int list[], int size )
{
int i, j, temp, swap = 1;
while (swap) {
swap = 0;
for ( i = (size-1) ; i >= 0 ; i-- ) {
for ( j = 1 ; j <= i ; j++ ) {
if ( list[j-1] > list[j] ) {
temp = list[j-1];
list[j-1] = list[j];
list[j] = temp;
swap = 1;
}
}
}
}
}
int main() {
int theList[10]={10, 5, 8, 3, 9, 5, 4, 7, 2, 1};
int i;
/* Invoke the bubble sort algorithm */
bubbleSort( theList, 10 );
/* Print out the final list */
for (i = 0 ; i < 10 ; i++) {
printf("%d\n", theList[i]);
}
}
该文件的makefile为:注意gcc前的tab
makefile中编译和链接都要带参数-fprofile-arcs -ftest-coverage 这是我用gcov做的覆盖率测试,
先前在第二个target行也加了tab报错,去掉tab后,在第一个gcc行后加了‘/’因为要换行。结果在执行的时候一直说无法找到result这个文件在我输入“ ./result/ ” 之后才行。发现不需要空格。
如果出现 Permission denied,就是权限问题,下面说一下关于权限的几个方法
1 root和其他用户组的切换
启用root 帐号(也就是设置一个口令)使用:
sudo passwd root
当你使用完毕后屏蔽root帐号,锁住root帐号使用:
sudo passwd -l root
从其他用户组切换至root使用:
sudo -s -H
从root切换至其他用户组使用:
su 用户组名
2 让所有用户获得该文件的读写权
sudo chmod 777 文件路径
3 将某个文件的所有者从root改为其他用户组
chown -R 用户组名 文件名
这些是最近在linux环境下尝试C代码覆盖率测试时遇到的问题找到的解决办法,也是搜的其它人的解决办法。现在将这些整理起来方便以后使用,也算是给大家的一个参考吧。