Я бы хотел поиграть с библиотекой Allegro, но, похоже, я не могу правильно связать свой тестовый проект. Точнее, я получаю ошибки cannot find -l<...>
, где <...>
- это файл, который я указал с помощью target_link_libraries
. (Подробнее см. Ниже.)
Для записи я не так хорошо разбираюсь в процессе сборки, и мой обычный подход к ней - "нажмите кнопку и надеюсь, что исполняемый файл всплывает, если нет, прибегает к пробной версии и ошибке". Здесь я нашел довольно много подобных вопросов, но кажется, что проблемы или решения отличаются от того, что я испытываю. Я надеюсь на определенное "здесь, что вы делаете неправильно, и вот что делать вместо этого".
Тем не менее, это моя структура проекта:
/include
/lib
/src
main.cpp
CMakeLists.txt
Каталоги include и lib, которые я скопировал из бинарного пакета Allegro, и lib, где находятся все файлы .a.
Вот что мой CMakeLists.txt говорит:
cmake_minimum_required(VERSION 3.2)
project(AllegroTest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -static-libgcc -static-libstdc++ -fpermissive")
add_definitions( -DALLEGRO_STATICLINK )
file(GLOB SOURCES src/*.cpp)
set(SOURCE_FILES ${SOURCES})
add_executable(AllegroTest ${SOURCE_FILES})
include_directories(include)
target_link_libraries(AllegroTest
liballegro-5.0.10-static-mt.a
liballegro_acodec-5.0.10-static-mt.a
liballegro_audio-5.0.10-static-mt.a
libvorbisfile-1.3.2-static-mt.a
libvorbis-1.3.2-static-mt.a
liballegro_color-5.0.10-static-mt.a
liballegro_dialog-5.0.10-static-mt.a
liballegro_font-5.0.10-static-mt.a
liballegro_image-5.0.10-static-mt.a
liballegro_memfile-5.0.10-static-mt.a
liballegro_physfs-5.0.10-static-mt.a
liballegro_primitives-5.0.10-static-mt.a
liballegro_ttf-5.0.10-static-mt.a
libdumb-0.9.3-static-mt.a
libFLAC-1.2.1-static-mt.a
libfreetype-2.4.8-static-mt.a
libogg-1.2.1-static-mt.a
libzlib-1.2.5-static-mt.a
libopenal-1.14-static-mt.a
)
target_link_libraries(AllegroTest
libgdiplus.a
libuuid.a
libkernel32.a
libwinmm.a
libpsapi.a
libopengl32.a
libglu32.a
libuser32.a
libcomdlg32.a
libgdi32.a
libshell32.a
libole32.a
libadvapi32.a
libws2_32.a
libshlwapi.a
)
И это ошибки, которые я получаю:
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lallegro-5.0.10-static-mt
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lallegro_acodec-5.0.10-static-mt
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lallegro_audio-5.0.10-static-mt
<etc.>
Я пробовал указать путь во всех отношениях imaginable — включая объединение его с использованием link_directories(lib)
— но ничего не имеет никакого эффекта.
Единственное, что работало, это указать абсолютный путь (C:/Users/<...>/lib/liballegro-5.0.10-static-mt.a
), но мне кажется, что это далеко не идеальный путь.
Какую ошибку я делаю здесь, и какой рекомендуемый способ ее исправить?