Как найти мою сгенерированную общую библиотеку из cmake?
Я хочу создать общую библиотеку из cmake
. У меня простойtest.cpp
.
Мой CMakeLists.txt
выглядит как ниже
cmake_minimum_required(VERSION 2.8)
project (test)
set(CMAKE_BUILD_TYPE Release)
#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_library(test SHARED /home/tuhin/test/test1/test.cpp)
Но я не могу найти "test"
который мой .so
, Я видел test.dir
папка создана, но не .so
Пожалуйста, помогите мне разобраться в проблеме.
1 ответ
(Полагаю, вы прочитали комментарии и поступили соответствующим образом...)
(Я также полагаю, вам нужен способ узнать, где будет размещена ваша библиотека, из системы сборки CMake)
Расположение на диске любой цели не зависит от CMakeLists.txt
только, но и от выбора генератора. Генераторы нескольких конфигураций, такие какVisual Studio something
, или Xcode
может добавить имя конфигурации в качестве дополнительного каталога, поэтому вы можете получить разные результаты, просто выбрав другой генератор.
Это означает, что не существует простого способа однозначно определить местоположение диска на этапе настройки. С другой стороны, вы можете легко проверить эту информацию на этапе сборки:
cmake_minimum_required(VERSION 3.15)
project (lib_file_name)
add_library(my_test_lib SHARED my_test_lib.cpp)
add_custom_target(output_lib_name
ALL
COMMAND ${CMAKE_COMMAND} -E echo "my_test_lib location: $<TARGET_FILE:my_test_lib>"
)
нота add_custom_target
линия:
- новая цель была добавлена, названа
output_lib_name
- он будет выполнен как часть построения цели по умолчанию (->
ALL
) - команда для создания этой цели просит cmake вывести имя файла рассматриваемой цели, используя выражения генератора CMAke (->
COMMAND ${CMAKE_COMMAND} -E echo "my_test_lib location: $<TARGET_FILE:my_test_lib>"
)
Если вы запустите его с генератором make-файлов:
$ cmake -S /tmp -B /tmp/make-build -G "Unix Makefiles" ; cmake --build /tmp/make-build
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/make-build
Scanning dependencies of target my_test_lib
[ 50%] Building CXX object CMakeFiles/my_test_lib.dir/my_test_lib.cpp.o
[100%] Linking CXX shared library libmy_test_lib.dylib
[100%] Built target my_test_lib
Scanning dependencies of target output_lib_name
my_test_lib location: /tmp/make-build/libmy_test_lib.dylib
[100%] Built target output_lib_name
Обратите внимание на линию
my_test_lib location: /tmp/make-build/libmy_test_lib.dylib
если вы запустите его с генератором Xcode:
настроить:
$ cmake -S /tmp -B /tmp/xcode-build -G Xcode
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/xcode-build
конфигурация выпуска сборки:
$ cmake --build /tmp/xcode-build --config Release
........... lot of output deleted ...........
my_test_lib location: /tmp/xcode-build/Release/libmy_test_lib.dylib
** BUILD SUCCEEDED **
конфигурация отладки сборки:
$ cmake --build /tmp/xcode-build --config Debug
........... lot of output deleted ...........
my_test_lib location: /tmp/xcode-build/Debug/libmy_test_lib.dylib
** BUILD SUCCEEDED **
Обратите внимание, как расположение отличается для разных сборок конфигурации без каких-либо изменений в системе сборки CMake.
В конце концов, это документация cmake о add_custom_command, выражениях генератора cmake.