#ifdef __cplusplus
extern "C"
{
#endif
#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>
#include "swap.h"
#include "apple.h"
void* swapapple(void* x)
{
swapvec((struct number *)x);
}
void* addapple(void* x)
{
int sum;
sum = addvec((struct number *)x);
printf("sum = %d\n",sum);
}
int main()
{
int x = 12 ,y = 90;
struct number apple;
pthread_t ThreadA,ThreadB;
pthread_rwlock_t aaa;
apple.x= x;
apple.y= y;
pthread_rwlock_init(&apple.rwLock,NULL);
pthread_create(&ThreadA,NULL,swapapple,&apple);
pthread_create(&ThreadB,NULL,addapple,&apple);
pthread_join(ThreadA,NULL);
pthread_join(ThreadB,NULL);
printf("x = %d,y = %d\n",apple.x,apple.y);
return 0;
}
#ifdef __cplusplus
}
#endif
autoconf实例
需积分: 0 65 浏览量
更新于2008-07-09
收藏 186KB RAR 举报
在IT行业中,构建自动化工具是开发过程中的重要一环,其中`autoconf`是一个广泛使用的开源工具,主要用于生成跨平台的配置脚本,使源代码能够适应不同的操作系统和编译环境。`autoconf`通过自动检测系统特性并生成相应的`configure`脚本来简化软件的编译和安装过程。下面我们将深入探讨`autoconf`的工作原理、使用方法以及一个实际的实例。
`autoconf`基于M4宏语言,它会检查系统上的各种特性,如库的存在、函数的可用性等,并生成一个`configure`脚本。这个脚本能够创建Makefile,使得项目可以根据目标系统的特性进行定制编译。`configure`脚本通常在项目的根目录下运行,它会检查依赖项,设置路径变量,并为`make`命令准备合适的Makefile。
在`autoconf`的实例中,我们通常会遵循以下步骤:
1. **初始化项目**:在项目根目录下创建一个名为`configure.ac`的文件,这是`autoconf`的输入文件,包含了所有关于项目配置的指令和宏。
2. **定义宏**:在`configure.ac`中,我们需要定义一些基本的宏,比如项目名称、版本号、所需的库等。例如:
```m4
AC_INIT([项目名称], [版本号])
```
3. **检测系统特性**:使用`AC_CHECK_HEADERS`、`AC_CHECK_FUNCS`等宏来检测系统是否包含特定头文件或支持特定函数。例如:
```m4
AC_CHECK_HEADERS(stdio.h)
AC_CHECK_FUNCS([malloc])
```
4. **配置编译选项**:根据检测结果,`autoconf`会生成适当的`--with`或`--without`选项,允许用户在运行`configure`时自定义配置。
5. **生成`configure`脚本**:使用`autoconf`命令生成`configure`脚本:
```
autoconf configure.ac
```
6. **运行`configure`**:在项目目录下运行`./configure`,这将根据系统特性生成`Makefile`。
7. **编译和安装**:使用`make`和`make install`来编译项目并将其安装到指定位置。
在提供的`project`压缩包文件中,我们可以假设它包含了一个使用`autoconf`的示例项目。项目结构可能如下:
- `configure.ac`
- `src/` - 源代码目录
- `Makefile.am` - 用于指导`automake`生成Makefile模板的文件
在这个实例中,用户需要解压`project`,然后在项目根目录下执行以下命令来配置和编译项目:
```
./configure
make
sudo make install
```
通过以上步骤,`autoconf`帮助开发者创建了一个可以跨平台编译的项目,减少了在不同系统上手动调整编译选项的繁琐工作。对于大型项目或依赖众多库的项目,`autoconf`的使用可以极大地提高开发效率和代码的可移植性。