如何编写makefile来生成目标文件和可执行文件在不同的目录中?
现在继续我需要更改现有Makefile的表示。
目前我正在使用:
~/Linuz/src: 1.c, 2.c, 3.c ... ~/Linuz/inc: abc.h, xyz.h
和makefile在: ~/Linuz/some_other_dir/
但需要改变结构。
- 想要从(
~/Linuz/src/
和~/linuz/inc
)创建一个库 - 库将用于获取可执行文件。 应用程序源文件(.c文件)位于
~/Linuz/app/
-
~/Linuz/bin/
应该在编译期间创建,以存储所有目标文件和可执行文件。
有什么建议 ??
我的makefile看起来像这样:
all: Library.a %.o: ../src/%.c $(CC) $(CFLAGS) -I../inc/ -c -o $@ $^ Library.a: $(SRC_DIR)/1.c $(SRC_DIR)/2.c $(SRC_DIR)/3.c $(SRC_DIR)/4.c $(SRC_DIR)/5.c $(CC) $(LDFLAGS) -o $@ $^ all: prog %.o: ./*.c $(CC) $(CFLAGS) -ILibrary.a -c -o $@ $^ prog: $(APP_DIR)/app1.c $(APP_DIR)/app2.c $(APP_DIR)/app3.c clean: rm -f *.o my_program
假设您的代码体系结构如下所示:
└── linuz ├── app │ ├── app1.c │ ├── app2.c │ └── app3.c ├── bin ├── inc │ └── any.h ├── some_other_dir │ └── Makefile └── src ├── 1.c ├── 2.c └── 3.c
所以你的Makefile可能是:
all: ../bin/libmy_lib.a ../bin/my_program ../bin/my_lib_%.o: ../src/%.c $(CC) $(CFLAGS) -I../inc -c -o $@ $^ ../bin/libmy_lib.a: ../bin/my_lib_1.o ../bin/my_lib_2.o ../bin/my_lib_3.o ar rcs $@ $^ ../bin/my_app_%.o: ../app/%.c $(CC) $(CFLAGS) -I../inc -c -o $@ $^ ../bin/my_program: ../bin/my_app_app1.o ../bin/my_app_app2.o ../bin/my_app_app3.o ../bin/libmy_lib.a $(CC) $(LDFLAGS) -L../bin/ -lmy_lib -o $@ $^ clean: rm -f ../bin/*.o ../bin/libmy_lib.a ../bin/my_program
有关说明,请参阅上一个问题