如何在cmake项目中使用allegro5?

How to use allegro5 in a cmake project?

我正在尝试将 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 文件。

除了对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 安装正确。)