CMake不能使用相对文件路径找到静态库
CMake cannot find a static library using relative file paths
我想玩周围的Allegro库,但我似乎不能得到我的测试项目链接正确。确切地说,我得到了cannot find -l<...>
错误,其中<...>
是我使用target_link_libraries
指定的文件。(详情见下文)
郑重声明,我对构建过程并不了解,我通常的方法是"点击一个按钮,希望弹出一个可执行文件,如果没有,就尝试和错误。"我在这里发现了很多类似的问题,但似乎无论是问题还是解决方案都与我所经历的不同。我希望有一个明确的"这是你做错的地方,这是你应该做的"。
也就是说,这是我的项目结构:
/include
/lib
/src
main.cpp
CMakeLists.txt
我从Allegro二进制包中复制的include和lib目录,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.>
我已经尝试了所有可能的方法来指定路径—包括与link_directories(lib)
&mdash的结合使用;但似乎没有任何效果。
C:/Users/<...>/lib/liballegro-5.0.10-static-mt.a
),但我觉得这远非理想的方式。
我在这里犯了什么错误,建议用什么方法来修复它?
我推荐的方法是使用绝对路径。我不知道为什么你认为这远不是理想的;实现起来很简单:
target_link_libraries(AllegroTest
${CMAKE_CURRENT_SOURCE_DIR}/lib/liballegro-5.0.10-static-mt.a
${CMAKE_CURRENT_SOURCE_DIR}/lib/liballegro_acodec-5.0.10-static-mt.a
etc.
)
我以前做过类似的事情,我做的是这样的:
link_directories(lib)
target_link_libraries(my_target
allegro-5.0.10-static-mt
allegro_acodec-5.0.10-static-mt
...
)
请注意,前面没有lib
,后面没有.a
。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- 基于boost的程序的静态链接——zlib问题
- Qt 静态编译无法读取路径
- 包括不排除静态库项目的用户路径的路径
- 无法使用 CMake 变量PROJECT_SOURCE_DIR定义静态库的绝对路径
- 如何确定升压路径的静态LIB路径
- 类型名称路径由一个静态变量隐藏
- Xcode 静态库 - 路径奇特
- 在静态库中硬编码的代码文件和头路径
- 用静态库的完整路径链接可执行文件
- 在cygwin下提升c++静态链接路径
- CMake不能使用相对文件路径找到静态库