gpt4 book ai didi

cmake - 自定义目标作为 cmake 中的目标库

转载 作者:行者123 更新时间:2023-12-03 14:55:30 25 4
gpt4 key购买 nike

我有一个自定义目标,它实际上是一个外部生成的库,我想将它集成到我的构建中。

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/liblib2.a
COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/makefile liblib2.a)

add_custom_target(lib2
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/liblib2.a)

我如何告诉 cmake 这个目标实际上是一个库, 在哪里可以找到它,标题在哪里 ?

要清楚: 我不希望使用此库的上层 CMakeList 必须手动指定包含文件夹和库位置文件夹 它必须自动完成(从目标属性)。

在标准的 cmake 库中,我只需要在库 CMakeLists 中添加 INTERFACE_INCLUDE_DIRECTORIES 属性,即可使 cmake 将我的应用程序与相关的 -I 和 -L gcc 参数链接起来:
set_target_properties(lib1
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES
${CMAKE_CURRENT_SOURCE_DIR})

但是在自定义目标的情况下,我不知道如何去做。

任何线索?

谢谢你的帮助。

感谢 zaufi 它有效!

对于可能对在 cmake 中嵌入外部构建目标感兴趣的其他人,我所做的是:
cmake_minimum_required(VERSION 2.8)

SET(LIB_FILE ${CMAKE_CURRENT_SOURCE_DIR}/bin/liblib2.a)
SET(LIB_HEADER_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}/include)

# how to build the result of the library
add_custom_command(OUTPUT ${LIB_FILE}
COMMAND make
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

# create a target out of the library compilation result
add_custom_target(lib2_target DEPENDS ${LIB_FILE})

# create an library target out of the library compilation result
add_library(lib2 STATIC IMPORTED GLOBAL)
add_dependencies(lib2 lib2_target)

# specify where the library is and where to find the headers
set_target_properties(lib2
PROPERTIES
IMPORTED_LOCATION ${LIB_FILE}
INTERFACE_INCLUDE_DIRECTORIES ${LIB_HEADER_FOLDER})

现在在 CMakeLists.txt 我可以做类似的事情
add_subdirectory(${ROOT_DIR}/lib1 bin/lib1)
add_subdirectory(${ROOT_DIR}/lib2 bin/lib2)
add_executable(app app.c )
target_link_libraries(app lib1 lib2)

无需指定 .a 和 .h 的位置。

最佳答案

您可以使用 add_library()并告诉它实际上 imported .然后,使用 set_target_properties()您可以设置所需INTERFACE_XXX属性。之后,您可以像项目构建的其他所有目标一样将其用作有序目标。

关于cmake - 自定义目标作为 cmake 中的目标库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31274577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com