Search code examples
cmake

Weird Behavior of cmake's FetchContent_Declare on MacOS


cmake_minimum_required(VERSION 3.10)
include(FetchContent)
project(qluto4)


set(CMAKE_INCLUDE_CURRENT_DIR ON)

message(STATUS "Fetching libiio from github")
FetchContent_Declare(
    libiio
    GIT_REPOSITORY https://github.com/analogdevicesinc/libiio
    GIT_TAG main
)

include_directories(build/_deps/libiio-build)

FetchContent_MakeAvailable(libiio)

When I want to build this project, it fails with the following error:

...
[ 30%] Built target iio
[ 31%] Building C object _deps/libiio-build/CMakeFiles/iio-compat.dir/compat.c.o
[ 32%] Building C object _deps/libiio-build/CMakeFiles/iio-compat.dir/dynamic-unix.c.o
[ 34%] Linking C shared library iio.framework/iio
Fixup Current symbolic link
/bin/sh: line 0: cd: /Users/myzinsky/Programming/qluto4/build/iio.framework/Versions: No such file or directory
make[2]: *** [_deps/libiio-build/iio.framework/Versions/0.99/iio] Error 1
make[2]: *** Deleting file `_deps/libiio-build/iio.framework/Versions/0.99/iio'
make[1]: *** [_deps/libiio-build/CMakeFiles/iio-compat.dir/all] Error 2
make: *** [all] Error 2

So it seems that cmake places the generated framework iio.framework not where it actually expects it. I can find the file at:

build/_deps/libiio-build/iio.framewok


Solution

  • That's the final solution that I found.

    cmake_minimum_required(VERSION 3.30)
    project(pluto17)
    include(FetchContent)
    include(ExternalProject)
    
    set(CMAKE_CXX_STANDARD 20)
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    
    ExternalProject_Add(
        libiio
        GIT_REPOSITORY https://github.com/analogdevicesinc/libiio
        GIT_TAG v0.26
        INSTALL_COMMAND   ""
    )
    
    ExternalProject_Add(
        libad9361-iio
        GIT_REPOSITORY https://github.com/analogdevicesinc/libad9361-iio
        GIT_TAG v0.3
        INSTALL_COMMAND   ""
        CMAKE_ARGS
            -DLIBIIO_INCLUDEDIR=${CMAKE_BINARY_DIR}/libiio-prefix/src/libiio/
            -DLIBIIO_LIBRARIES=${CMAKE_BINARY_DIR}/libiio-prefix/src/libiio-build/iio.framework/
    )
    
    add_executable(pluto17
        src/main.cpp
    )
    
    add_dependencies(pluto17 libiio libad9361-iio)
    
    target_include_directories(pluto17
        PRIVATE ${CMAKE_BINARY_DIR}/libiio-prefix/src/libiio/
    )
    
    target_link_libraries(pluto17 PRIVATE ${CMAKE_DL_LIBS})