c - Makefile 使用单个 make 文件构建两个源代码

标签 c linux makefile

我正在尝试使用单个 makefile 构建两个源代码。我想先构建 Linux-PAM-1.2.0,然后再构建 pam_radius-1.4.0。 pam_radius-1.4.0为最外层目录,Linux-PAM-1.2.0为内层目录。

| pam_radius-1.4.0 -- Linux-PAM-1.2.0

每个都有自己的 make 文件。我需要先编译 Linux-PAM-1.2.0,然后我需要编译 pam_radius-1.4.0,因为我需要提供 Linux-PAM-1.2.0 的路径来编译 pam_radius-1.4.0。

我对pam_radius-1.4.0 makefile做了一些修改。我需要先编译 Linux-PAM-1.2.0,然后我需要编译 pam_radius-1.4.0,因为我需要提供 Linux-PAM-1.2.0 的路径来编译 pam_radius-1.4.0 makefile。我的 make 文件失败了。在做之前我需要创建一个安装目录。对 pam_radius-1.4.0 Makefile 进行了如下更改。我在 Makefile 中启用了 mkdir mkdir $(SUBDIR)/install/ 并且 make 我得到了一个错误。如果我禁用 mkdir,我会收到一条消息 make: Linux-PAM-1.2.0' is up to date.。我已经在 make 中完成了 make clean:`Linux-PAM-1.2.0' 是最新的。

我的make文件如下

SUBDIR = Linux-PAM-1.2.0
CC = arc-linux-uclibc-gcc
INSTALL_PATH = $(shell pwd)
LINUX_PAM_PATH = $(shell pwd)/$(SUBDIR)/
mkdir $(SUBDIR)/install/

$(SUBDIR):
    $(MAKE) -C $(LINUX_PAM_PATH)
    $(MAKE) -C install
CFLAGS = -Wall -fPIC -I $(INSTALL_PATH)/$(LINUX_PAM)/install/include/
LDFLAGS = -L $(INSTALL_PATH)/$(LINUX_PAM)/install/lib/
all:pam_radius_auth.so
pam_radius_auth.o: src/pam_radius_auth.c src/pam_radius_auth.h
    $(CC) $(CFLAGS) -c $< -o $@
md5.o: src/md5.c src/md5.h
    $(CC) $(CFLAGS) -c $< -o $@
pam_radius_auth.so: pam_radius_auth.o md5.o
pam_radius_auth.so: pam_radius_auth.o md5.o
    $(CC) $(CFLAGS) $(LDFLAGS) -shared pam_radius_auth.o md5.o -lpam -o pam_radius_auth.so

你能告诉我我在这里做错了什么吗?如果我取消对 mkdir 的注释,我会得到一个错误,如果我进行注释,那么它会说 make: `Linux-PAM-1.2.0' 是最新的。

最佳答案

您的 Makefile 应如下所示:

SUBDIR = Linux-PAM-1.2.0
CC = arc-linux-uclibc-gcc
INSTALL_PATH = $(shell pwd)
LINUX_PAM_PATH = $(shell pwd)/$(SUBDIR)/

CFLAGS = -Wall -fPIC -I $(INSTALL_PATH)/$(LINUX_PAM)/install/include/
LDFLAGS = -L $(INSTALL_PATH)/$(LINUX_PAM)/install/lib/

all: pam_radius_auth.so
    mkdir -p $(SUBDIR)/install/
    $(MAKE) -C $(LINUX_PAM_PATH)
    $(MAKE) -C install

pam_radius_auth.so: pam_radius_auth.o md5.o
    $(CC) $(CFLAGS) $(LDFLAGS) -shared pam_radius_auth.o md5.o -lpam -o pam_radius_auth.so

pam_radius_auth.o: src/pam_radius_auth.c src/pam_radius_auth.h
    $(CC) $(CFLAGS) -c $< -o $@

md5.o: src/md5.c src/md5.h
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f *.o *.so

关于c - Makefile 使用单个 make 文件构建两个源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377747/

相关文章:

linux - 如何正确使用libevent的信号事件

linux - 如何将 Linux 日期从 14-01-2015 转换为 14-1-2015?

c++ - 简单的更改导致 make : Error 1

makefile - 如何理解这个 Go makefile?

c - 通过 strdup() 和 malloc() 构造字符串之间有什么实际区别吗?

c - 在 C 中初始化和声明字符数组

.net - 在 ubuntu 18.4 上为 .net 应用程序创建服务期间出错。可执行路径不是绝对的 :

mysql - 更改 makefile 后 C makefile 无法编译

c - 尝试在 Mac OSX 上设置 clang 和 llvm 以使用 gedit 运行 runC

我可以在不同的文件中定义 2 个相同类型的结构,我想将一个结构传递给另一个吗?