如何在CMake中构建和添加依赖库

问题描述

对于我的项目,我需要构建并包含另一个https://github.com/t-dillon/tdoku/作为依赖项。

Toku也使用CMake构建,并且可以通过执行以下构建脚本来运行:

protected

这会将库文件放在class Rectangle: public Shape { public: using Shape::setWidth; using Shape::setHeight; int getArea() const { return (width * height); } }; 中。

我正在尝试在CMake中构建Toku库,并将其用作依赖项。我该怎么办?

我尝试使用$ cd lib/toku $ ./BUILD.sh ./lib/tdoku/build/libtdoku.aadd_custom_targetadd_custom_command无济于事。

我当前的add_dependencies如下:

add_subdirectory

解决方法

在@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带我去How do I enable link time optimization (LTO) with CMake?

这终于使我能够编译项目。

整个更改列表包括:

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)