使用make编译allegro5程序

时间:2014-03-17 15:45:59

标签: c makefile allegro5

我有一个名为zone.c的程序,它使用allegro5库。

我有一个只包含这两行的makefile。

zone: zone.c
        gcc zone.c -o zone $(pkg-config --cflags --libs allegro-5.0 allegro_primitives-5.0)

当我输入“make”时,我会收到以下错误:

/tmp/ccyCx3Hy.o:在函数main': zone.c:(.text+0x14): undefined reference to al_install_system'中 zone.c :(。text + 0x23):对al_create_display' zone.c:(.text+0x3b): undefined reference to al_map_rgb'的未定义引用 zone.c :(。text + 0x70):对al_clear_to_color' zone.c:(.text+0x84): undefined reference to al_map_rgb'的未定义引用 zone.c :(。text + 0xd1):对al_draw_filled_circle' zone.c:(.text+0xe5): undefined reference to al_map_rgb'的未定义引用 zone.c :(。text + 0x132):对al_draw_filled_circle' zone.c:(.text+0x137): undefined reference to al_flip_display'的未定义引用 zone.c :(。text + 0x14f):对al_rest' zone.c:(.text+0x15b): undefined reference to al_destroy_display'的未定义引用 collect2:错误:ld返回1退出状态 make: * [zone]错误1

但是,如果我只是复制出“gcc zone.c -o zone $(pkg-config --cflags --libs allegro-5.0 allegro_primitives-5.0)”这一行并手动运行,它编译得很好并且程序正常工作

如果我使用类似的makefile编译不使用allegro5的程序,那么就开始工作。

有人知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

如果您想在规则中使用文字$,则必须通过编写$$来将其从格式中删除:

zone: zone.c
        gcc zone.c -o zone $$(pkg-config --cflags --libs allegro-5.0 allegro_primitives-5.0)