未定义的引用使用automake

时间:2015-03-26 02:54:22

标签: c makefile automake

我的项目结构如下

-myProject
    -Makefile.am
    -configure.ac
    -src
        -Makefile.am
        -add.c
        -add.h
    -tests
        -Makefile.am
        -tests.c

Makefile.am

SUBDIRS = src tests
ACLOCAL_AMFLAGS = -I m4

src / Makefile.am

AM_CFLAGS = -Wall -lcunit -nostartfiles 
bin_PROGRAMS = addNum
addNum_SOURCES = add.c
addNum_CFLAGS = $(AM_CFLAGS)

src / add.c

#include <stdio.h>
#include <stdlib.h>
#include "add.h"

int addNum(int a, int b){
    return a+b;
}

tests / Makefile.am

AM_CFLAGS = -Wall -lcunit

INCLUDES = -I$(top_srcdir)/src -I../src 

noinst_LTLIBRARIES = libsrc.la
libsrc_la_SOURCES = -I$(top_srcdir)/src
libsrc_la_CFLAGS = $(AM_CFLAGS)


bin_PROGRAMS = test
test_SOURCES = tests.c
test_CFLAGS = $(AM_CFLAGS)
test_LDADD = libsrc.la

tests / tests.c

#include <stdio.h>
#include <stdlib.h>
#include "add.h"

int main(void){
    printf("num:%d",addNum(1,1));
    return 0;
}

错误:

tests.c:6: undefined reference to 'addNum'

我尝试在tests / tests.c中包含addNum函数。 我错过了什么吗? 感谢。

1 个答案:

答案 0 :(得分:2)

排序版本的答案是改变

libsrc_la_SOURCES = -I$(top_srcdir)/src

libsrc_la_SOURCES = -I$(top_srcdir)/src/add.c

这意味着您需要通过libsrc.la库定义所需的源列表。

但我认为你最好按照长版本答案的步骤进行操作。 我猜你试图从libsrc.la目录中的源列表创建一个src二进制文件,然后用一组测试链接这个二进制文件。首先,您需要在src目录中创建库。

的src / Makefil.am

AM_CFLAGS = -Wall -lcunit
noinst_LTLIBRARIES = libsrc.la
libsrc_la_SOURCES = add.c
libsrc_la_CFLAGS = $(AM_CFLAGS)

然后将您的测试与此库链接。

测试/ Makefile.am

AM_CFLAGS = -Wall -lcunit
INCLUDES = -I$(top_srcdir)/src -I../src 
bin_PROGRAMS = test
test_SOURCES = tests.c
test_CFLAGS = $(AM_CFLAGS)
test_LDADD = ../src/libsrc.la