Cmake:在构建树中导出具有相同名称的目标

时间:2016-05-05 13:55:59

标签: namespaces cmake

假设我有两个独立的cmake项目,即:

... / mylib1 / (CMakelists.txt)

project(mylib_1)
add_library(mylib STATIC ${SOURCES})

...

... / mylib2 / (CMakelists.txt)

project(mylib_2)
add_library(mylib STATIC ${SOURCES})

现在,如果我的应用项目有:

... / app / :( CMakelists.txt)

add_subdirectories(mylib1)
add_subdirectories(mylib2)

cmake会抱怨有两个同名的图书馆目标。为了解决这个问题,我使用了导出功能:

export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>])

所以我有类似的东西:

project(mylib_1)
add_library(mylib STATIC ${SOURCES})
install(TARGETS mylib Export myExports ...)
export(myExports NAMESPACE One)

访问这些项目的根项目将:

execute_process(COMMAND cmake path/to/lib1
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lib1
)
include(${CMAKE_BINARY_DIR}/lib1/myExports.cmake)

之后,可以使用例如:

target_link_libraries(app mylib  One::mylib)
target_link_libraries(app mylib  Two::mylib)

所以没有名字冲突。这工作正常但这需要我修改我试图包含的包。所以我想知道是否有处理这些导出文件并在父级别分配/更改其命名空间。

我对此设置感兴趣的原因是,例如,我想使用同一个库的两个版本,或者如果我有项目A,取决于项目B和C谁都依赖于项目D.我可以保留名称D中的空间将根据项目中的层次结构动态评估:即AB或AC但我不认为这是一种很好的方法。 那么有没有办法导入/处理导出文件并给它一个新的命名空间?

0 个答案:

没有答案