假设我有两个独立的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但我不认为这是一种很好的方法。 那么有没有办法导入/处理导出文件并给它一个新的命名空间?