首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制造相对路径是否与gcc相对路径相同?

制造相对路径是否与gcc相对路径相同?
EN

Stack Overflow用户
提问于 2015-01-19 10:39:40
回答 1查看 4.5K关注 0票数 1

我知道这听起来像个愚蠢的问题,而且确实如此。我正在尝试编写一个makefile,它构建并链接到我正在编写的静态库(这是一个单元测试框架)。基本上,当我使用make时,我不知道呼叫gcc的工作目录在哪里。

我的目录结构如下所示:

代码语言:javascript
复制
./
|-> src
|-> include
|-> project
    |-> Makefile
|-> test
    |-> test.c, test.h
    |-> project
        |-> Makefile

因此,如果我转到test/project目录并键入以下命令,我似乎没有任何问题。

代码语言:javascript
复制
gcc -I../../include -I../../src ../test.c

但是,如果我使用的makefile基本上是相同的配置(makefile在下面),那么我将得到一个类似于以下内容的错误:

代码语言:javascript
复制
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不同的相对路径,而makefile包含了与其本身不同的相对路径,那么使用make的正确方法是什么?我应该将我的工作目录更改为包含test.c的目录,并包含相对于该目录的目录,还是应该像从makefile目录中调用gcc一样,将相对路径放置到所有东西上?

这是我的makefile

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-19 12:02:46

在makefile中将${CLAGS}替换为$(CFLAGS) (parens而不是方括号,修复变量名中的类型)。与现在一样,不使用makefile中的CFLAGS变量。这就是为什么它的内容没有显示在编译器调用中,这也是为什么../../include不是编译器搜索路径的一部分。

除此之外:除非您做了一些更改,否则编译器调用的工作目录就是您调用make的目录。您可以通过放置一个具有以下内容的makefile来测试这一点:

代码语言:javascript
复制
all:
        pwd

在目录中,比如/home/user/foo/bar/Makefile。然后:

代码语言:javascript
复制
$ cd /home/user/foo/bar
$ make
/home/user/foo/bar
$ cd ..
$ make -f bar/Makefile
/home/user/foo
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28022699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档