Issue
I would like to use and deploy an external library in my program.
My project's structure is as follow (simplified):
ProjectDir
|_ _build
|_ CMakeLists.txt
|_ Src
| |_ CMakeLists.txt
| |_ .h and .cpp files
|_ ThirdParty
|_ CMakeLists.txt
|_ ExternalLib
|_ includes
| |_ .h files
|_ lib
|_ Windows
| |_ .dll files
|_ Linux
|_ .so files
For this library, I've only the include files and the binaries for Windows and Linux.
I'm able to find the includes files by using target_include_directories()
in the CMakeLists.txt
of the ThirdParty directory but I cannot build my program even by declaring the libraries with :
target_link_libraries(${CMAKE_PROJECT_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty/ExternalLib/lib/Windows/extLib)
Note: this command is also in the CMakeLists.txt
of ThirdParty directory.
I get the following error:
'../../../ThirdParty/ExternalLib/lib/Windows/extLib', needed by 'program' missing and no known rule to make it
I develop on a Windows platform with VS2022 and my program will be build and installed on a Linux server.
On Windows I've the latest version of CMake but on Linux the version is 3.16.
Can somebody help me in fixing this error?
Solution
You should import library as a target of you project. For instance something like
add_library(your_lib SHARED IMPORTED)
set_property(TARGET your_lib PROPERTY
IMPORTED_LOCATION
"${CMAKE_SOURCE_DIR}/ThirdParty/ExternalLib/lib/Linux/extLib.so") # to be adapted for windows
target_include_directories(your_lib
PUBLIC
${CMAKE_SOURCE_DIR}/ThirdParty/ExternalLib/include)
then you should be able to use it as any other library in cmake:
target_link_libraries(yourExecutable PRIVATE your_lib)
see doc in details here: https://cmake.org/cmake/help/latest/guide/importing-exporting/index.html
Answered By - OznOg Answer Checked By - Timothy Miller (WPSolving Admin)