Cannot link .a file
I'm trying to link a library libgatt.a
which is already made but CMake for some reason assumes something needs to be made in order to make the file.
The CMakeLists.txt looks like this:
cmake_minimum_required(VERSION 3.16)
project(IMUServer)
set(CMAKE_CXX_STANDARD 14)
include_directories(lib/libgatt/include)
add_executable(${PROJECT_NAME} main.cpp)
include_directories(${PROJECT_SOURCE_DIR}/lib/libgatt/include)
link_directories(${PROJECT_SOURCE_DIR}/lib/libgatt)
target_link_libraries(${PROJECT_NAME} "${PROJECT_SOURCE_DIR}/lib/libgatt/libgatt.a")
The file exists at PROJECT_ROOT/lib/libgatt/libgatt.a
This results in the following error (translated to english):
====================[ Build | IMUServer | Debug ]===============================
/usr/bin/cmake --build /home/andre/CLionProjects/IMUServer/cmake-build-debug --target IMUServer -- -j 6
make[1]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[2]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[3]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[3]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[3]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[3]: *** No rule to make target "../lib/libgatt/libgatt.a", necessary for "IMUServer". Stopping.
make[3]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/IMUServer.dir/all] Error 2
make[2]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/IMUServer.dir/rule] Error 2
make[1]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make: *** [Makefile:118: IMUServer] Error 2
How can cmake expect a rule for a file? I don't want to use modules to compile the library. Is it impossible to straight out use the .a file directly?
Also, if I use
target_link_libraries(${PROJECT_NAME} gatt)
This results in the linker not being able to detect the existing file:
====================[ Build | IMUServer | Debug ]===============================
/usr/bin/cmake --build /home/andre/CLionProjects/IMUServer/cmake-build-debug --target IMUServer -- -j 6
make[1]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[2]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[3]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[3]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[3]: entering folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
[ 50%] Linking CXX executable IMUServer
/usr/bin/ld: cannot find -lgatt
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/IMUServer.dir/build.make:84: IMUServer] Error 1
make[3]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/IMUServer.dir/all] Error 2
make[2]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/IMUServer.dir/rule] Error 2
make[1]: leaving folder "/home/andre/CLionProjects/IMUServer/cmake-build-debug"
make: *** [Makefile:118: IMUServer] Error 2
Edited by André Santos