【问题标题】:How to use allegro5 in a cmake project?如何在 cmake 项目中使用 allegro5?
【发布时间】:2021-08-23 21:10:55
【问题描述】:

我正在尝试将 allegro5 包含在 cmake 项目中。

find_package(PkgConfig REQUIRED)

include_directories(${PROJECT_SOURCE_DIR})
add_executable(app main.c)

pkg_check_modules(allegro-5 REQUIRED allegro-5)
target_link_libraries(app ${ALLEGRO5_LIBRARIES})
target_include_directories(app PUBLIC ${ALLEGRO5_INCLUDE_DIRS})

我的 main.c 是:

#include <allegro5/system.h>

int main()
{
    al_init();
    return 0;
}

但是当我运行cmake --build . 时,我收到以下错误:

main.c:(.text+0x14): undefined reference to `al_install_system'
collect2: error: ld returned 1 exit status

我正在寻找与 allegro5 链接的应用程序的示例 CMakeLists.txt 文件。

【问题讨论】:

    标签: cmake allegro5


    【解决方案1】:

    除了对pkg_check_modules()的误会之外,你几乎拥有它。

    pkg_check_modules() 的第一个参数是您选择的文字前缀。这将是pkg_check_modules() 设置的所有变量的前缀。如果您选择了“foo”,将设置的变量将是foo_LIBRARIESfoo_INCLUDE_DIRSfoo_CFLAGS 等。

    您选择了前缀“allegro-5”,但在后续命令中您尝试使用变量ALLEGRO_LIBRARIESALLEGRO5_INCLUDE_DIRS。未设置这些变量,因为您实际需要的变量是allegro-5_LIBRARIESallegro-5_INCLUDE_DIRS。将这 3 个三个命令更改为:

    pkg_check_modules(ALLEGRO5 REQUIRED allegro-5)
    target_link_libraries(app ${ALLEGRO5_LIBRARIES})
    target_include_directories(app PUBLIC ${ALLEGRO5_INCLUDE_DIRS})
    

    或:

    pkg_check_modules(allegro-5 REQUIRED allegro-5)
    target_link_libraries(app ${allegro-5_LIBRARIES})
    target_include_directories(app PUBLIC ${allegro-5_INCLUDE_DIRS})
    

    一旦您将pkg_check_modules() 中给出的前缀与您要使用的变量匹配,您的项目将正确构建。 (当然假设 Allegro 5 安装正确。)

    【讨论】:

    • 非常感谢您的友好解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多