Я изучаю CMake, но я стараюсь понять, как связать двоичный файл с общей библиотекой, а затем установить эти файлы в папку выпуска.Cmake Общая библиотека
Это структура моего проекта:
├── CMakeLists.txt
├── build
├── main
│ ├── CMakeLists.txt
│ └── main.cpp
├── release
|_______bin
│ ├── include
│ │ └── math.h
│ └── lib
│ └── libmathLib.dylib
└── shared_lib
├── CMakeLists.txt
├── include
│ └── math.h
└── src
└── math.cpp
В корневой CMakeLists.txt я определил параметры проекта и поддиректорию.
Корень CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
project (Math)
set(CMAKE_BUILD_TYPE Release)
set(MAKE_INCLUDE_CURRENT_DIR ON)
ADD_SUBDIRECTORY(shared_lib)
ADD_SUBDIRECTORY(main)
Главная CMakeLists.txt:
add_executable(main main.cpp)
TARGET_LINK_LIBRARIES(main LINK_PUBLIC mathLib)
Math Lib (общий Lib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_library(mathLib SHARED src/math.cpp)
install(TARGETS mathLib DESTINATION /Users/giuseppe/development/cmake/release/lib LIBRARY NAMELINK_ONLY)
install(FILES include/math.h DESTINATION /Users/giuseppe/development/cmake/release/include)
Когда я строю проект с косметическим, его не связывает main.o с общей библиотекой. Ошибка: фаза
Scanning dependencies of target mathLib
[ 50%] Building CXX object shared_lib/CMakeFiles/mathLib.dir/src/math.cpp.o
Linking CXX shared library libmathLib.dylib
[ 50%] Built target mathLib
Scanning dependencies of target main
[100%] Building CXX object main/CMakeFiles/main.dir/main.cpp.o
/Users/giuseppe/development/cmake/main/main.cpp:8:12: error: use of undeclared identifier 'sum'
count << sum(5,6) << endl;
^
1 error generated.
make[2]: *** [main/CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [main/CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2
выпуска:
Как я могу убедиться, что создает в папке бен в папке релиза использовать общий LIB в «путь/выпуска/Lib»? Возможно, используя относительный путь, например «../lib/»?
Ваше имя исполняемого файла является 'math', и вы пытаетесь установить ссылку на цель с именем' main'. Это опечатка? – HeyYO
@ HeyYO спасибо, да это опечатка. –
'использование необъявленного идентификатора' является ошибкой компилятора, а не компоновщиком. Существует проблема с вашими включениями. Вы уверены, что 'math.h' находится в вашем пути включения? Я предполагаю, что это файл, который объявляет 'sum()'. – HeyYO