cmake dwie aplikacje wspolna bibloteka ale różne wersje

0

Czy można w projekcie cmake kompilować kilka aplikacji które używają bibliotek z GIT-a
ale każda aplikacja używa innej rewizji ?

app1 używa biblioteki https://git.com/xyz.git wersji 000001
app2 używa biblioteki https://git.com/xyz.git wersji 000002

cmake_minimum_required(VERSION 3.0.0)
project(app1 VERSION 0.1.0)
include(FetchContent)
FetchContent_Declare(
    lib1
    GIT_REPOSITORY https://git.com/xyz.git
    GIT_TAG 000001
)
FetchContent_Populate(lib1)
add_subdirectory(${lib1_SOURCE_DIR} ${lib1_BINARY_DIR})
add_executable(app1 main.cpp)
target_link_libraries(app1 lib)
cmake_minimum_required(VERSION 3.0.0)
project(app2 VERSION 0.1.0)
include(FetchContent)
FetchContent_Declare(
    lib2
    GIT_REPOSITORY https://git.com/xyz.git
    GIT_TAG 000002
)
FetchContent_Populate(lib2)
add_subdirectory(${lib2_SOURCE_DIR} ${lib2_BINARY_DIR})
add_executable(app2 main.cpp)
cmake_minimum_required(VERSION 3.0.0)
project(master VERSION 0.1.0)

add_subdirectory(app1)
add_subdirectory(app2)

CMake Error at build/_deps/.../CMakeLists.txt:x (add_library):
[build] add_library cannot create target "xyz" because another
[build] target with the same name already exists. The existing target is a static
[build] library created in source directory
[build] ".../build/_deps/lib2-src/src".
[build] See documentation for policy CMP0002 for more details.

0

zdaje mi się żę to

[build] target with the same name already exists. The existing target is a static

to klucz
https://stackoverflow.com/questions/8439631/cmake-multiple-subprojects-using-the-same-static-library
Bo faktycznie wygląda jakby ci sie targety mieszały.

0

cmake jest cudowne !

Kombinowałem kombinowałem i wykombinowałem
https://github.com/mariuszmaximus/xyz_client.git
używa
https://github.com/mariuszmaximus/xyz.git

biblioteka ma zmienna XYZ_NAME i można ja ustawić per TARGET

make_minimum_required(VERSION 3.0.0)
project(xyz VERSION 0.1.0)

if(XYZ_NAME)
else()
    set(XYZ_NAME "xyz")
endif()

message(STATUS "PPPPPPPPPPPPPPP")
message(STATUS "XYZ_NAME=${XYZ_NAME}")
message(STATUS "PPPPPPPPPPPPPPP")

add_library(${XYZ_NAME} xyz.cpp)

target_include_directories(${XYZ_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 
-
  app1/
    CMakeLists.txt  (uzywa biblioteki xyz z xyz1-src)
  app2/
    CMakeLists.txt  (uzywa biblioteki xyz z xyz2-src)
  build
    _deps
      xyz1-src  
        CMakeLists.txt
      xyz2-src  
        CMakeLists.txt
       
    CMakeLists.txt

1 użytkowników online, w tym zalogowanych: 0, gości: 1