RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1104409
Accepted
Elvin
Elvin
Asked:2020-04-02 20:06:38 +0000 UTC2020-04-02 20:06:38 +0000 UTC 2020-04-02 20:06:38 +0000 UTC

为什么手动在控制台中键入的命令可以工作,但在 makefile 中却不行?

  • 772

我想创建一个 makefile 来将 freetype 库静态编译成ubuntu. 从她的安装说明中发现

The following  should work  on all Unix  systems where  the `make'
    command invokes GNU Make:

      ./configure [options]
      make
      make install           (as root)

    The default installation path  is `/usr/local'.  It can be changed
    with the `--prefix=<path>' option.  Example:

      ./configure --prefix=/usr

对此只做了一点补充:我只需要静态库,不需要动态库。因此,我用手在控制台中输入的命令如下所示:

elvin@ubuntu:~/lab1/freetype$ ./configure --prefix=/home/elvin/lab1/freetype --enable-freetype-config --enable-static --disable-shared

它没有错误地工作,并且在没有 sudo 的情况下启动。然后(根据文档)我们执行命令make:

elvin@ubuntu:~/lab1/freetype$ make

其输出的一小部分'a:

./builds/unix/libtool --mode=compile gcc -pedantic -ansi -I/home/elvin/.local/share/Trash/files/freetype.16/objs -I./builds/unix -I/home/elvin/.local/share/Trash/files/freetype.16/include  -c -Wall -g -O2 -fvisibility=hidden -I/usr/local/include -I/usr/local/include/libpng16 -I/usr/local/include -DFT_CONFIG_CONFIG_H="<ftconfig.h>" -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H="<ftmodule.h>" -DFT_CONFIG_OPTIONS_H="<ftoption.h>" -o /home/elvin/.local/share/Trash/files/freetype.16/objs/ftsystem.lo builds/unix/ftsystem.c

最后(应该是 sudo):

elvin@ubuntu:~/lab1/freetype$ sudo make install

一切都组装好了,静态库出现了。

现在我正在做同样的事情,但在 makefile 的帮助下:

PathFreetype:=freetype

#to know the folder
mkfile_path2 := $(abspath $(lastword $(MAKEFILE_LIST)))
mkfile_dir2 := $(dir $(mkfile_path2))
#makefile узнает,где он
LIB:=lib
empty:=
space:= $(empty) $(empty)

mkfile_dir2:=$(subst $(space),$(empty),$(mkfile_dir2))
mkfile_dir2:=$(mkfile_dir2)$(PathFreetype)
#удаляю пробел в конце пути к папке и дописываю freetype
# we need this to make static compile of libpng as it requiers the full absolute path to create a static lib ./configure [--prefix=/path] <---— path!
static:
echo "$(mkfile_dir2)" #проверяю,что имя папки уже с freetype
cd $(mkfile_dir2) && sudo ./configure —prefix=$(mkfile_dir2) --enable-freetype-config --enable-static --disable-shared ; make ; sudo $(MAKE) install

Запускаю: elvin@ubuntu:~/lab1$ make static 

但是 make 不起作用并发出以下错误:

make[1]: Entering directory '/home/elvin/lab1/freetype'
./builds/unix/libtool --mode=compile gcc -pedantic -ansi -I/home/elvin/lab1/freetype/objs -I./builds/unix -I/home/elvin/lab1/freetype/include  -c -Wall -g -O2 -fvisibility=hidden -I/usr/local/include -I/usr/local/include/libpng16 -I/usr/local/include -DFT_CONFIG_CONFIG_H="<ftconfig.h>" -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H="<ftmodule.h>" -DFT_CONFIG_OPTIONS_H="<ftoption.h>" -o /home/elvin/lab1/freetype/objs/ftsystem.lo builds/unix/ftsystem.c
libtool: compile:  gcc -pedantic -ansi -I/home/elvin/lab1/freetype/objs -I./builds/unix -I/home/elvin/lab1/freetype/include -c -Wall -g -O2 -fvisibility=hidden -I/usr/local/include -I/usr/local/include/libpng16 -I/usr/local/include "-DFT_CONFIG_CONFIG_H=<ftconfig.h>" -DFT2_BUILD_LIBRARY "-DFT_CONFIG_MODULES_H=<ftmodule.h>" "-DFT_CONFIG_OPTIONS_H=<ftoption.h>" builds/unix/ftsystem.c -o /home/elvin/lab1/freetype/objs/ftsystem.o
builds/unix/ftsystem.c:19:10: fatal error: ft2build.h: No such file or directory
 #include <ft2build.h>

如您所见,由于某种原因,make(manual)和makefilovsky进入了不同的目录。为什么会出现这样的错误以及如何解决?

makefile
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    aleksandr barakin
    2020-04-03T06:32:17Z2020-04-03T06:32:17Z
    1. cd以和开头的行echo- 这显然是你的食谱。那么这两行的开头需要一个制表符。
    2. 而且你不需要sudofront 。./configure
    3. 和一个错字:—prefix而不是--prefix
    4. 并且prefix当然不应该与源所在的目录一致。
    5. 为什么要对名称和目录进行所有这些复杂的操作?因为它可以更容易(最好在空目录中运行):
    f = freetype-2.10.1
    a = $(f).tar.gz
    
    static: $(f)
        cd $< && ./configure --prefix=$(PWD)/$@ --enable-freetype-config --enable-static --disable-shared
        $(MAKE) -C $<
        $(MAKE) -C $< install
    
    $(f): $(a)
        tar -xf $<
    
    $(a):
        wget https://download.savannah.gnu.org/releases/freetype/$@
    
    clean:
        -rm -rf $(f)
    
    distclean: clean
        -rm -rf static $(a)
    
    
    • 1

相关问题

  • 为什么 substr makefile 示例不起作用

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5