Chinaunix首页 | 论坛 | 博客
  • 博客访问: 149772
  • 博文数量: 23
  • 博客积分: 546
  • 博客等级: 中士
  • 技术积分: 608
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-02 18:04
文章分类

全部博文(23)

文章存档

2012年(23)

我的朋友

分类: LINUX

2012-07-17 11:33:40

没有过多的解释,只是给自己一个提示:

main函数:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include "test2.h"

  3. //#define TEST_DEFINE_1

  4. #ifdef DEBUG
  5. #define ct_http_print(fmt, ...) do { printf("%s %s, %d:" fmt, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__); \
  6.                                                                         } while(0)
  7. #else
  8. #define ct_http_print(fmt, ...) do {} while(0)
  9. #endif


  10. #ifdef TEST
  11. void print_test_define_1(){
  12.         printf("TEST_DEFINE_1 is defined!\n");
  13.         return;
  14. }
  15. #else
  16. void print_test_define_1(){
  17.         return;
  18. }
  19. #endif

  20. int main() {
  21.         char s[] = "test string!\n";

  22.         print_test_define_1();
  23.         ct_http_print("hello, world, this is test of DEBUG define! string: %s\n", s);
  24.         print2("hello test2");
  25.         return 0;
  26. }

test2.h

点击(此处)折叠或打开

  1. #ifndef __TEST2_H__
  2. #define __TEST2_H__

  3. #include <stdio.h>
  4. #include <stdlib.h>

  5. void print2(const char* str);

  6. #endif
test2.c

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include "test2.h"

  3. void print2(const char* str)
  4. {
  5.         printf("TEST2: string : %s", str);
  6. }
先从最简单的Makefile开始吧
假设main源文件中得define都是被注释掉,makefile如下:

点击(此处)折叠或打开

  1. main:main.o test2.o
  2.         gcc -Wall -g main.o test2.o -o main
  3. main.o:mian.c
  4.         gcc -Wall -g -c main.c -o main.o
  5. test2.o:test2.c test2.h
  6.         gcc -Wall -g -c test2.c -o test2.o

  7. clean:
  8.          rm -rf *.o main
现在在最简单的makefile上进行修改,利用makefile的内嵌变量

点击(此处)折叠或打开

  1. main:main.o test2.o
  2.         gcc -Wall -g $+ -o $@
  3. main.o:main.c
  4.         gcc -Wall -g -c $< -o $@
  5. test2.o:test2.c test2.h
  6.         gcc -Wall -g -c $< -o $@

  7. clean:
  8.         rm -rf *.o main
在上面的Makefile基础上再进行修改,自己声明变量,这里只替换一部分,你也可以多定义几个变量把所有的全部替换:

点击(此处)折叠或打开

  1. EXE=main
  2. OBJS=main.o test2.o

  3. $(EXE):$(OBJS)
  4.         gcc -Wall -g $+ -o $@
  5. main.o:main.c
  6.         gcc -Wall -g -c $< -o $@
  7. test2.o:test2.c test2.h
  8.         gcc -Wall -g -c $< -o $@

  9. clean:
  10.         rm -rf *.o main
下面还是在上面makefile的基础上修改,用到makefile的静态模式

  1. EXE=main
  2. OBJS=main.o test2.o

  3. $(EXE):$(OBJS)
  4.         gcc -Wall -g $< -o $@
  5. objs:$(OBJS)
  6. %.o:%.c
  7.         gcc -Wall -g -c $< -o $@
  8. clean:
  9.         rm -rf *.o main
注意上面的Makefile是不正确的,它会报错,但是你把第五行的$<换成$+或者$(OBJS)就可以了,为什么呢?我猜想的是$<仅代表一个依赖,所以在编译的时候没能把后面test2.o加进去,导致错误。

下面把所有的全部换成变量:

点击(此处)折叠或打开

  1. EXE=main
  2. CC = gcc
  3. CFLAGS = -Wall

  4. OBJS=test2.o main.o


  5. $(EXE):$(OBJS)
  6.         $(CC) $(MY_CFLAGS) $(CFLAGS) $+ -o $@
  7. objs:$(OBJS)
  8. %.o:%.c
  9.         $(CC) $(MY_CFLAGS) $(CFLAGS) -c $< -o $@

  10. clean:
  11.         rm -rf *.o main
这是在注释了main函数的define的makefile。那么现在来一个完整的Makefile

点击(此处)折叠或打开

  1. EXE=main
  2. CC = gcc
  3. CFLAGS = -Wall

  4. MY_CFLAGS =
  5. DEBUG =
  6. TD =
  7. OBJS=test2.o main.o

  8. ifdef DEBUG
  9.         MY_CFLAGS += -g -DDEBUG
  10. else
  11.         MY_CFLLAGS += -g -O2
  12. endif

  13. ifdef TD
  14.         MY_CFLAGS += -DTEST
  15. endif

  16. $(EXE):$(OBJS)
  17.         $(CC) $(MY_CFLAGS) $(CFLAGS) $+ -o $@
  18. objs:$(OBJS)
  19. %.o:%.c
  20.         $(CC) $(MY_CFLAGS) $(CFLAGS) -c $< -o $@

  21. clean:
  22.         rm -rf *.o main
  23. 注意MY_CFLAGS=DTEST不要少了D

输入make时就要加入:make TD=1 DEBUG=1这样才能是main函数的define生效
阅读(1347) | 评论(0) | 转发(1) |
0

上一篇:Makefile的变量

下一篇:tcp拥塞控制

给主人留下些什么吧!~~