使用 CMake 作为外部项目构建和链接 OpenAL-Soft

问题描述 投票:0回答:1

我正在尝试使用 CMake 构建并链接 OpenAL-Soft (https://github.com/kcat/openal-soft/tree/master) 作为 CLion 上的外部项目。

我通过以下方式获取 OpenAL 源文件:

ExternalProject_Add(OpenAL-lib
        GIT_REPOSITORY https://github.com/kcat/openal-soft.git
        GIT_TAG makemhr
        SOURCE_DIR ${PROJECT_BINARY_DIR}/downloaded_dependencies/OpenAL
        BINARY_DIR ${PROJECT_BINARY_DIR}/builded_dependencies/OpenAL
        INSTALL_DIR ${PROJECT_BINARY_DIR}/dependencies/OpenAL
        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DLIBTYPE=SHARED
)

然后我用以下方法搜索包裹:

find_package (OpenAL PATHS "${PROJECT_BINARY_DIR}/dependencies/OpenAL" NO_DEFAULT_PATH CONFIG REQUIRED)
find_package(OpenAL CONFIG REQUIRED)

最后链接到我的可执行文件:

add_executable(Nite main.cpp)
target_link_libraries(Nite PUBLIC OpenAL)

首先,我下载、构建并安装 OpenAL,无需使用 find_package() 和 target_link_libraries() 命令,然后添加它们并构建整个项目,此时出现以下错误:

FAILED: Nite.exe 
C:\Windows\system32\cmd.exe /C "cd . && "C:\Users\Galo\AppData\Local\Programs\CLion Nova\bin\cmake\win\x64\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\Nite.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x86\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x86\mt.exe --manifests  -- "E:\Visual Studio\Community\VC\Tools\MSVC\14.38.33130\bin\Hostx86\x86\link.exe" /nologo CMakeFiles\Nite.dir\main.cpp.obj  /out:Nite.exe /implib:Nite.lib /pdb:Nite.pdb /version:0.0 /machine:X86 /INCREMENTAL:NO /subsystem:console  dependencies\glfw\lib\glfw3dll.lib  dependencies\glm\lib\glm.lib  E:\VulkanSDK\Lib32\vulkan-1.lib  OpenAL.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
LINK: command "E:\Visual Studio\Community\VC\Tools\MSVC\14.38.33130\bin\Hostx86\x86\link.exe /nologo CMakeFiles\Nite.dir\main.cpp.obj /out:Nite.exe /implib:Nite.lib /pdb:Nite.pdb /version:0.0 /machine:X86 /INCREMENTAL:NO /subsystem:console dependencies\glfw\lib\glfw3dll.lib dependencies\glm\lib\glm.lib E:\VulkanSDK\Lib32\vulkan-1.lib OpenAL.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST:EMBED,ID=1" failed (exit code 1181) with the following output:
LINK : fatal error LNK1181: no se puede abrir el archivo de entrada 'OpenAL.lib'

当我构建并安装 OpenAL 时,我会得到一个 OpenAL32.dll,如果我将 LIBTYPE 选项更改为 STATIC,我会得到一个 OpenAL32.lib

cmake c++17 openal-soft
1个回答
0
投票

好吧,我解决了这个问题,当将库链接到可执行文件时,目标应该是 OpenAL::OpenAL 而不仅仅是 OpenAL。 我的意思是:

right way: target_link_libraries(Nite PUBLIC OpenAL::OpenAL)
wrong way: target_link_libraries(Nite PUBLIC OpenAL)
© www.soinside.com 2019 - 2024. All rights reserved.