【发布时间】:2015-01-19 10:39:40
【问题描述】:
我知道这听起来像是一个愚蠢的问题,而且确实如此。我正在尝试编写一个makefile,它针对我正在编写的静态库构建和链接(这是一个单元测试框架)。基本上,当我使用 make 时,我无法弄清楚调用 gcc 的工作目录在哪里。
我的目录结构如下:
./
|-> src
|-> include
|-> project
|-> Makefile
|-> test
|-> test.c, test.h
|-> project
|-> Makefile
所以,如果我进入 test/project 目录并输入以下命令,我似乎没有任何问题
gcc -I../../include -I../../src ../test.c
但是,如果我使用具有基本相同配置的 makefile(makefile 在下面),则会出现以下错误:
gcc -o test ../test.c
In file included from ../test.c:7:0:
../test.h:8:24: fatal error: System.h: No such file or directory
#include "System.h"
(System.h 是我位于include/ 目录中的头文件之一)。
所以这是我的问题。由于我正在尝试使用 gcc 在与 makefile 不同的相对路径编译文件,该文件包含来自与自身不同的相对路径,因此使用 make 执行此操作的正确方法是什么?我应该将我的工作目录更改为包含 test.c 的目录,并包含相对于该目录的目录,还是应该将相对路径放置到所有内容,就好像我从 makefile 的目录中调用 gcc 一样?
这是我的生成文件
CC = gcc
CFLAGS = -Wall -std=c99 -static -I../../include -I../../src -L$(LIBTARGET) -lmystaticlib
TARGET_APP=test
LIBTARGET = ../../project
all : $(TARGET_APP)
$(TARGET_APP) : library
$(CC) ${CLAGS} -o $@ ../test.c
library :
$(MAKE) -C $(LIBTARGET)
【问题讨论】:
-
您的 makefile 有错字,您使用的是 ${CLAGS} 而不是 ${CFLAGS}