Construyendo y vinculando OpenAL-Soft con CMake como un proyecto externo
Estoy intentando crear y vincular OpenAL-Soft ( https://github.com/kcat/openal-soft/tree/master ) con CMake como un proyecto externo en CLion.
Obtengo archivos fuente OpenAL a través de:
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
)
luego busco el paquete con:
find_package (OpenAL PATHS "${PROJECT_BINARY_DIR}/dependencies/OpenAL" NO_DEFAULT_PATH CONFIG REQUIRED)
find_package(OpenAL CONFIG REQUIRED)
y finalmente enlace a mi ejecutable:
add_executable(Nite main.cpp)
target_link_libraries(Nite PUBLIC OpenAL)
En primer lugar, descargo, construyo e instalo OpenAL sin los comandos find_package() y target_link_libraries(), luego los agrego y construyo el proyecto completo, en este punto aparece el siguiente error:
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'
Cuando construyo e instalo OpenAL obtengo un OpenAL32.dll, si cambio la opción LIBTYPE a ESTÁTICO obtengo un OpenAL32.lib
Aceptado
Bueno, lo resolví, al vincular la biblioteca al ejecutable el objetivo debería ser OpenAL::OpenAL en lugar de solo OpenAL. Quiero decir:
right way: target_link_libraries(Nite PUBLIC OpenAL::OpenAL)
wrong way: target_link_libraries(Nite PUBLIC OpenAL)