【发布时间】:2015-02-23 21:48:28
【问题描述】:
我正在尝试为小型项目编写自己的 makefile,我的项目由 src 目录组成,其中包含 main.c、file1.c、file2.c、header1.h,最后是 header2.h 这些文件使用了一些库我创建的非标准库目录和非标准头文件,库目录位于 usr/lib/pr__lib 和头目录位于 usr/include/lib 所以我应该创建两个makefile.am,一个位于src目录,另一个位于项目的根目录,src目录的makefile.am如下所示:
program_NAME := myproject
AM_CPPFLAGS = \
-DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \
-DPACKAGE_SRC_DIR=\""$(srcdir)"\" \
-DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\"
bin_PROGRAMS = myproject_AutoProject
program_INCLUDE_DIRS := /usr/bin/srr__bin
program_LIBRARY_DIRS := /usr/lib/srr__lib
AM_CFLAGS =
AM_CFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
program_lib2 := \
libsrr\
libprdsl \
libtwo \
libhistogram \
libhistogram_pic \
libprlistofarrays \
libprlistofarrays_pic \
libprmalloc \
libvreo
AM_LDFLAGS =
AM_LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
AM_LDFLAGS += $(foreach library,$(program_lib2),-l$(library))
PRDSL_AutoProject_SOURCES = \
main.c \
file1.c \
file2.c
depend :
makedepend -$(CFLAGS) -$(PRDSL_AutoProject_SOURCES)
all: $(program_NAME)
第二个makefile.am如下图:
SUBDIRS = src
myproject_AutoProjectdocdir = ${prefix}/doc/PRDSL_AutoProject
myproject_AutoProjectdoc_DATA = \
README\
COPYING\
AUTHORS\
ChangeLog\
INSTALL\
NEWS
INTLTOOL_FILES = intltool-extract.in \
intltool-merge.in \
intltool-update.in
EXTRA_DIST = $(myproject_AutoProjectdoc_DATA) \
$(INTLTOOL_FILES)
DISTCLEANFILES = intltool-extract \
intltool-merge \
intltool-update \
po/.intltool-merge-cache
# Remove doc directory on uninstall
uninstall-local:
-rm -r $(PRDSL_AutoProjectdocdir)
但我收到以下错误:
/usr/bin/ld: cannot find -llibsrr
/usr/bin/ld:.......
其余的库也一样! 我猜这里是depend命令的问题,谁能告诉我如何使用depend命令来自动创建依赖并避免人为错误
【问题讨论】:
-
这是确切的错误信息吗?你使用
-lsrr链接libsrr.so/libsrr.a库。 -
一些库是 .a 静态的,另一个是 .so 动态的>
-
.a与.so通常对-l无关紧要。这个名字可以。从所有这些名称中删除lib前缀。 -
@EtanReisner 非常感谢 :) 你是 makefile 英雄,错误已解决,但它抱怨一个与依赖 make[2] 相关的新错误:*** 没有规则来制作目标
myproject', needed by全部'。停止。 -
您的
depend配方仍然不太正确,但这又可能不相关。使用最新的 makefile 和新的错误消息提交一个新问题。
标签: c linux makefile dependencies