簡體   English   中英

如何從 cmake 找到我生成的共享庫?

[英]How to find my generated shared library from 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)

但是我無法找到我的.so "test" ,我已經看到test.dir文件夾創建但沒有.so

請幫助我理解這個問題。

(我想你閱讀了評論並采取了相應的行動......)

(我還假設您需要一種方法來從 CMake 構建系統中找出您的庫的放置位置)

任何目標的磁盤位置不僅僅取決於CMakeLists.txt ,還取決於生成器的選擇。 Visual Studio somethingXcode這樣的多配置生成器可能會附加配置名稱作為附加目錄,因此只需選擇不同的生成器,您可能會得到不同的結果。

這意味着在配置階段沒有簡單的方法來唯一標識磁盤位置。 另一方面,您可以在構建階段非常輕松地檢查該信息:

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

如果使用 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 生成器運行它:

配置:

$ 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 構建系統沒有任何變化。

最后,這是關於add_custom_commandcmake 生成器表達式的 cmake 文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM