gpt4 book ai didi

Cmake add_library 别名

转载 作者:行者123 更新时间:2023-12-05 01:16:32 31 4
gpt4 key购买 nike

我想弄清楚 this 到底是什么行是在这个 github json 项目的 cmake 文件中,

add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE)
add_library(${PROJECT_NAME}::${NLOHMANN_JSON_TARGET_NAME} ALIAS ${NLOHMANN_JSON_TARGET_NAME})

特别是这个例子,这在这个 cmake 文件中允许什么,否则是不可能的?

我在这个 CMakeLists.cmake 中没有看到对 ${PROJECT_NAME}::${NLOHMANN_JSON_TARGET_NAME} 的其他引用,所以我不知道这到底能实现什么。

编辑:

实现的关键是,评论对我来说并不明显,它使目标在通过 add_subdirectory() 使用项目时与命名空间一起工作

最佳答案

没有别名,您仍然可以通过 add_subdirectory 添加库,但是在 target_link_libraries 命令中您需要省略命名空间:

project(mySuperApp)

set(mySuperApp_SRC src/main.c)

add_subdirectory(thirdparty/json)

add_executable(${PROJECT_NAME} ${mySuperApp_SRC})
target_link_libraries(${PROJECT_NAME} PRIVATE nlohmann_json)

如果您这样做但随后决定使用 find_package 来包含该库(而不是 add_subdirectory),您将需要更改 target_link_libraries 使用命名空间目标即

project(mySuperApp)

set(mySuperApp_SRC src/main.c)

find_package(nlohmann_json REQUIRED)

add_executable(${PROJECT_NAME} ${mySuperApp_SRC})
target_link_libraries(${PROJECT_NAME} PRIVATE nlohmann_json::nlohmann_json)

通过添加别名,使用命名空间版本(即 nlohmann_json::nlohmann_json)的 target_link_libraries 在任何一种情况下都可以工作,如果您稍后决定从 find_package< 切换,则不需要更改add_subdirectory)。

关于Cmake add_library 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53366477/

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