Как найти мою сгенерированную общую библиотеку из cmake? - PullRequest
0 голосов
/ 23 февраля 2020

Я хочу создать общую библиотеку из 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 Ответ

1 голос
/ 23 февраля 2020

(Полагаю, вы прочитали комментарии и действовали соответственно ...)

(Полагаю, вам нужен способ узнать, где будет расположена ваша библиотека из системы сборки CMake)

Местоположение диска любой цели зависит не только от CMakeLists.txt, но и от выбора генератора. Многоконфигурационные генераторы, такие как Visual Studio something или Xcode, могут добавить имя конфигурации в качестве дополнительного каталога, поэтому вы можете получить другие результаты, просто выбрав другой генератор.

Это означает, что не существует простого способа однозначно определить местоположение диска на этапе configure . С другой стороны, вы можете очень легко проверить эту информацию на этапе build :

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>"
  )

note add_custom_target line:

  • была добавлена ​​новая цель с именем output_lib_name
  • , она будет выполнена как часть построения цели по умолчанию (-> ALL)
  • Команда для создания этой цели запрашивает cmake для вывода имени файла рассматриваемой цели, используя выражения генератора CMAke (-> COMMAND ${CMAKE_COMMAND} -E echo "my_test_lib location: $<TARGET_FILE:my_test_lib>")

Если вы запускаете его с генератором makefile:

$ 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:

configure:

$ 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...