1.autoconf 是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统。为了让你的软件包在所有的不同系统上都可以进行编译
2…/configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
3.make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
linux下执行如下命令(执行目录为cunit源码安装包的位置):
root@ubuntu:/home/mf/CUnit-2.1-3# ./configure --prefix=`pwd`/release CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --host=arm-linux
指令说明:
当我们需要指导./configure的参数设置的时候 ,可以执行./configure --help显示所有的参数设置
–prefix=指定cunit软件安装的位置,这里是当前目录下面的/release文件夹,即/home/mf/CUnit-2.1-3/release
CC=指定编译器的类型,这里我们设备的交叉编译工具是arm-linux-gnueabihf-gcc
CXX=指定c++交叉编译工具,arm-linux-gnueabihf-gcc++
–host=指定软件运行的系统平台.如果没有指定,将会运行`config.guess’来检测.指令指定 arm平台
安装完成,没有报错
安装完成查看lib库是否存在,存在,成功啦
这里用到四个文件:Main.c test.c testcase.c Makefile
放在Linux 下面新建的 root@ubuntu:/home/mf/Desktop/cunittest目录下
Main.c
#include
#include
#include
#include
#include "Basic.h"
extern void AddTests(void);
int main(int argc, char* argv[])
{
CU_BasicRunMode mode = CU_BRM_VERBOSE;
CU_ErrorAction error_action = CUEA_IGNORE;
int i;
//标准库输出 无缓冲:不使用缓冲。每个 I/O 操作都被即时写入。buffer 和 size 参数被忽略。
setvbuf(stdout, NULL, _IONBF, 0);
for (i=1 ; i<argc ; i++) {
if (!strcmp("-i", *argv)) {
//错误发生时继续执行(默认)
error_action = CUEA_IGNORE;
}
else if (!strcmp("-f", *argv)) {
//错误发生时应系统停止
error_action = CUEA_FAIL;
}
else if (!strcmp("-A", *argv)) {
//错误发生时系统应退出(EXIT)
error_action = CUEA_ABORT;
}
else if (!strcmp("-s", *argv)) {
//只会输出错误信息
mode = CU_BRM_SILENT;
}
else if (!strcmp("-n", *argv)) {
//结果会输出基本信息,包括失败以及测试运行的总体状况
mode = CU_BRM_NORMAL;
}
else if (!strcmp("-v", *argv)) {
//输出测试运行的详细信息
mode = CU_BRM_VERBOSE;
}
else if (!strcmp("-e",*argv)) {
return 0;
}
else {
printf("\nUsage:BasicTest [options]\n\n"
"Options:-i ignore framework errors [default].\n"
" -f fail on framework error.\n"
" -A abort on framework error.\n\n"
" -s silent mode - no output to screen.\n"
" -n normal mode - standard output to screen.\n"
" -v verbose mode - max output to screen [default].\n\n"
" -e print expected test results and exit.\n"
" -h print this message and exit.\n\n");
return 0;
}
}
//CU_initialize_registry registry初始化//用户在调用任何其他CUnit函数之前调用本函数,如果不这样做可能会导致系统崩溃。
if (CU_initialize_registry()) {
printf("\nInitialization of Test Registry failed.");
}
else {
AddTests();
//CU_basic_set_mode()设置运行模式
CU_basic_set_mode(mode);
//CU_set_error_action设置错误发生时,系统的行为
CU_set_error_action(error_action);
//CU_basic_run_tests 运行Tests Basic Mode 基本扩展编程方式 非交互式
printf("\nTests completed with return value %d.\n",CU_basic_run_tests());
// registry释放
CU_cleanup_registry();
}
return 0;
}
testcase.c
#include
#include
#include
#include
#include
#include
/**//*---- functions to be tested ------*/
extern int maxi(int i , int j);
/**//*---- test cases ------------------*/
void testIQJ(void)
{
//断言相等比较
CU_ASSERT_EQUAL(maxi(1,1),1);
CU_ASSERT_EQUAL(maxi(0,-0),0);
}
void testIGJ(void)
{
CU_ASSERT_EQUAL(maxi(2,1),2);
CU_ASSERT_EQUAL(maxi(0,-1),0);
CU_ASSERT_EQUAL(maxi(-1,-2),-1);
}
void testILJ(void)
{
CU_ASSERT_EQUAL(maxi(1,2),2);
CU_ASSERT_EQUAL(maxi(-1,0),0);
CU_ASSERT_EQUAL(maxi(-2,-1),-1);
}
CU_TestInfo testcases[] = {
{"Testing i equals j:",testIQJ},
{"Testing i greater than j:",testIGJ},
{"Testing i less than j:", testILJ},
CU_TEST_INFO_NULL
};
/**//*---- test suites ------------------*/
int suite_success_init(void)
{ return 0; }
int suite_success_clean(void)
{ return 0; }
//需要运行的test case
CU_SuiteInfo suites[] = {
{"Testing the function maxi:",suite_success_init,suite_success_clean, NULL, NULL,testcases},
CU_SUITE_INFO_NULL
};
/*cunit运行环境设置*/
void AddTests(void)
{
//1.CU_get_registry CU_register_suites其他一些关于注册的内部函数,主要用于内部和测试的目的
assert(NULL != CU_get_registry());
assert(!CU_is_test_running());
//注册suites
if(CUE_SUCCESS != CU_register_suites(suites)){
fprintf(stderr, "Register suites failed - %s ", CU_get_error_msg());
exit(EXIT_FAILURE);
}
}
test.c
/**
*file:test.c
**/
int maxi(int i,int j)
{
return i>j?i:j;
}
Makefile
INC=-I/home/mf/CUnit-2.1-3/release/include/CUnit
LIB=-L/home/mf/CUnit-2.1-3/release/lib
all:Main.c test.c testcase.c
arm-linux-gnueabihf-gcc -o test $(INC) $(LIB) $^ -lcunit
clean:
-rm -rf *.o test
Makefile文件说明:INC=和LIB=的路径都要改成arm平台的cunit安装的路径
直接root@ubuntu:/home/mf/Desktop/cunittest# make
生成可执行文件test
1.连接设备,打开控制台,连接设备的网络
设备网络连接的设置:
上传ftpd文件
chmod 777 ftpd
tcpsvd -vE 0.0.0.0 21 /ftpd -wvvS / &
ifconfig eth0 192.168.0.100
电脑设置和设备同一个网段
打开filezilla工具:
上传基于arm平台lib库到设备的lib目录下面
上传完毕后,在设备控制台执行ldconfig命令加载lib库
2.上传可执行文件test到设备
3.修改可执行文件的权限 chmod 777 test
4.运行可执行文件./test,显示测试结果到控制台,移植成功