c - 如何编写makefile在不同目录中生成目标文件和可执行文件?

标签 c makefile gnu-make

现在要进一步进行,我需要更改现有 Makefile 的表示形式。

目前我正在使用:

~/Linuz/src: 1.c, 2.c, 3.c ...

~/Linuz/inc: abc.h, xyz.h

makefile 位于:~/Linuz/some_other_dir/

但需要改变结构。

  1. 想要从 (~/Linuz/src/~/linuz/inc) 创建库
  2. 库将用于获取可执行文件。应用程序源文件(.c 文件)位于 ~/Linuz/app/
  3. ~/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

有关说明,请参阅您的previous question

关于c - 如何编写makefile在不同目录中生成目标文件和可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494915/

相关文章:

build - 如何让 Qt-Creator 使用 cygwin make 构建?

c++ - CMake 外壳查找

c - GNU make 的回溯

c - 我的 makefile 有什么问题,最后一行永远不会执行?

javascript - 在 switch 条件下使用 float 不起作用,为什么?

c - 这些不同的 gcc 链接选项如何改变最终的可执行文件?

c - 使用 makefile 构建 gtk 项目时找不到“gtk/gtk.h”文件

makefile - 产生多个目标的配方

c - sprintf 中未获取任何数据

c - 链接列表不显示