如何使用cmake在名称空间中安装目标?

我具有以下设置,并希望导出foo :: core和foo :: bar以便在其他项目中使用:

project(foo)

add_library(core)
add_library(foo::core ALIAS core)

add_library(bar)
add_library(foo::bar ALIAS core)

install(TARGETS core bar EXPORT fooConfig)
install(EXPORT fooConfig NAMESPACE foo)
export(TARGETS core bar FILES fooConfig.cmake)


我可以使用find_package查找我的foo libaray,并且可以链接我的核心和bar库,但是它们不驻留在foo名称空间中

project(different_project)
find_package(foo REQUIRED)

add_executable(example)
target_link_libraries(example PRIVATE core bar) # this is possible
target_link_libraries(example PRIVATE foo::core foo::bar) # this is what i want, but not possible

最佳答案

NAMESPACEinstall(EXPORT)命令都支持选项export()

因此,要在安装树中添加名称空间,请使用

install(TARGETS core bar EXPORT fooConfig)
install(EXPORT fooConfig NAMESPACE foo)


并在构建树中使用

export(TARGETS core bar NAMESPACE foo FILE fooConfig.cmake)

关于c++ - 在 namespace 中安装目标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59142232/

10-11 22:42
查看更多