如何在 CMake 项目中包含相同依赖项的两个不同版本?
How to include two different versions of the same dependency in a CMake project?
我的系统中存在 1.2 和 2.2 版本的 ExternalProject。 ExternalProject 是一个 CMake 项目,当我要求时,CMake 可以毫无问题地找到这两个版本。命令 find_package(ExternalProject 1.2 EXACT)
查找版本 1.2,find_package(ExternalProject 2.2 EXACT)
查找版本 2.2。
版本 1 和版本 2 彼此不兼容。 API 完全不同。
我有一个 CMake 项目 MyProject,它有两个目标,targetOne 和 targetTwo。 TargetOne 使用 ExternalProject 1.2,TargetTwo 使用 ExternalProject 2.2。
下面的代码不符合我的要求。相同的外部依赖不会被查找两次。 TargetTwo 的编译失败。 CMake 是否以任何方式支持这种情况? (除了重命名 ExternalProject 版本 2 并在不同位置编译它)。
project(MyProject)
find_package(ExternalProject 1.2 EXACT)
add_executable(targetOne target_one.c)
target_link_libraries(targetOne ExternalProject::externalProject)
find_package(ExternalProject 2.2 EXACT)
add_executable(targetTwo target_two.c)
target_link_libraries(targetTwo ExternalProject::externalProject)
您不能在同一个 CMakeLists.txt
中混合使用相同名称的目标。使用不同的 CMakeLists.txt
- 每个 executable target. Use add_subdirectory
一个。
- 项目./CMakeLists.txt:
project(MyProject)
add_subdirectory(folder_one)
add_subdirectory(folder_two)
- ./folder_one/CMakeLists.txt:
find_package(ExternalProject 1.2 EXACT)
add_executable(targetOne target_one.c)
target_link_libraries(targetOne ExternalProject::externalProject)
- ./folder_two/CMakeLists.txt:
find_package(ExternalProject 2.2 EXACT)
add_executable(targetTwo target_two.c)
target_link_libraries(targetTwo ExternalProject::externalProject)
此外,对于 scope changing you can use the function
我的系统中存在 1.2 和 2.2 版本的 ExternalProject。 ExternalProject 是一个 CMake 项目,当我要求时,CMake 可以毫无问题地找到这两个版本。命令 find_package(ExternalProject 1.2 EXACT)
查找版本 1.2,find_package(ExternalProject 2.2 EXACT)
查找版本 2.2。
版本 1 和版本 2 彼此不兼容。 API 完全不同。
我有一个 CMake 项目 MyProject,它有两个目标,targetOne 和 targetTwo。 TargetOne 使用 ExternalProject 1.2,TargetTwo 使用 ExternalProject 2.2。
下面的代码不符合我的要求。相同的外部依赖不会被查找两次。 TargetTwo 的编译失败。 CMake 是否以任何方式支持这种情况? (除了重命名 ExternalProject 版本 2 并在不同位置编译它)。
project(MyProject)
find_package(ExternalProject 1.2 EXACT)
add_executable(targetOne target_one.c)
target_link_libraries(targetOne ExternalProject::externalProject)
find_package(ExternalProject 2.2 EXACT)
add_executable(targetTwo target_two.c)
target_link_libraries(targetTwo ExternalProject::externalProject)
您不能在同一个 CMakeLists.txt
中混合使用相同名称的目标。使用不同的 CMakeLists.txt
- 每个 executable target. Use add_subdirectory
一个。
- 项目./CMakeLists.txt:
project(MyProject)
add_subdirectory(folder_one)
add_subdirectory(folder_two)
- ./folder_one/CMakeLists.txt:
find_package(ExternalProject 1.2 EXACT)
add_executable(targetOne target_one.c)
target_link_libraries(targetOne ExternalProject::externalProject)
- ./folder_two/CMakeLists.txt:
find_package(ExternalProject 2.2 EXACT)
add_executable(targetTwo target_two.c)
target_link_libraries(targetTwo ExternalProject::externalProject)
此外,对于 scope changing you can use the function