【发布时间】:2020-09-05 11:14:59
【问题描述】:
对于我的项目,我需要构建并包含另一个库 https://github.com/t-dillon/tdoku/ 作为我的依赖项。
Toku 也是使用 CMake 构建的,我可以通过以下方式运行构建脚本:
$ cd lib/toku
$ ./BUILD.sh
这会将库文件放入./lib/tdoku/build/libtdoku.a。
我正在尝试在 CMake 中构建 Toku 库,并将其用作依赖项。我该怎么做?
我尝试使用add_custom_target、add_custom_command、add_dependencies、add_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)
【问题讨论】:
-
为什么这么多人倾向于使用
add_custom_command(TARGET)flow?此命令流程适用于一些特定情况。在正常情况下,如果你知道COMMAND的输出,则将其放入add_custom_command(OUTPUT)流中。否则,将其直接放入add_custom_target调用中。不知道你想通过add_dependencies(tdoku project_1_cpp)调用实现什么,但如果你想表达“为了构建我的project_1_cpp可执行toku目标应该已经构建”,使用add_dependencies(project_1_cpp toku)。 -
@Tsyvarev 我不太确定自己在做什么。我尝试改用
add_custom_command。我现在收到The dependency target ".../libtdoku.a" of target "project_1_cpp" does not exist. -
嗯,我得到了库编译,但得到像
/usr/bin/ld: DWARF error: could not find variable specification at offset b090这样的错误。
标签: cmake dependencies libraries cmake-custom-command