簡體   English   中英

如何在 CMake 中構建和添加依賴庫

[英]How to build and add a dependency library in CMake

對於我的項目,我需要構建並包含另一個庫https://github.com/t-dillon/tdoku/作為我的依賴項。

Toku 也是使用 CMake 構建的,我可以通過以下方式運行構建腳本:

$ cd lib/toku
$ ./BUILD.sh

這會將庫文件放在./lib/tdoku/build/libtdoku.a

我正在嘗試在 CMake 中構建 Toku 庫,並將其用作依賴項。 我怎樣才能做到這一點?

我嘗試使用add_custom_targetadd_custom_commandadd_dependenciesadd_subdirectory無濟於事。

我當前的CMakeLists.txt看起來像:

cmake_minimum_required(VERSION 3.17)
project(project_1_cpp)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion")
set(CMAKE_CXX_FLAGS_DEBUG_INIT "")
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3")

add_custom_target(toku)
add_custom_command(
  TARGET toku
  COMMAND ${CMAKE_SOURCE_DIR}/lib/tdoku/BUILD.sh
  WORKING_DIR ${CMAKE_SOURCE_DIR}/lib/tdoku
)

file(GLOB project_1_src "*.cpp")
add_executable(project_1_cpp ${project_1_src})
add_dependencies(tdoku project_1_cpp)
target_link_libraries(project_1_cpp ${CMAKE_SOURCE_DIR}/lib/tdoku/build/libtdoku.a)

在@Tsyvarev 的幫助下,我首先將CMakeLists.txt更改為包括:

add_custom_command(
  OUTPUT ${CMAKE_SOURCE_DIR}/lib/tdoku/build/libtdoku.a
  COMMAND ${CMAKE_SOURCE_DIR}/lib/tdoku/BUILD.sh tdoku
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib/tdoku
)
add_custom_target(project DEPENDS ${CMAKE_SOURCE_DIR}/lib/tdoku/build/libtdoku.a)

關鍵是WORKING_DIR不起作用,我需要改用WORKING_DIRECTORY 我通過嘗試修改build.sh腳本並讓它將內容打印到文件中來解決這個問題,這樣我就可以知道它是否正在運行,以及腳本內部發生了什么問題。 我意識到腳本的工作目錄是錯誤的。

事實上,我相信我在發布問題之前做了所有這些,但之后我得到了以下錯誤,這讓我認為tdoku庫沒有正確編譯。 是的,但它錯誤地鏈接到我的項目:

/usr/bin/ld: /usr/bin/ld: DWARF error: could not find variable specification at offset 223f
/usr/bin/ld: DWARF error: could not find variable specification at offset 22ba

我在 google 上搜索了"DWARF error: could not find variable specification" ,這導致我找到ld.exe: DWARF error: could not find variable specification at offset 101cee 谷歌搜索cmake flto引導我如何使用 CMake 啟用鏈接時間優化 (LTO)? .

這最終讓我能夠編譯我的項目。

整個更改列表包括:

set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)

add_custom_command(
  OUTPUT ${CMAKE_SOURCE_DIR}/lib/tdoku/build/libtdoku.a
  COMMAND ${CMAKE_SOURCE_DIR}/lib/tdoku/BUILD.sh tdoku
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/lib/tdoku
)
add_custom_target(project DEPENDS ${CMAKE_SOURCE_DIR}/lib/tdoku/build/libtdoku.a)

暫無
暫無

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

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