CMake Ошибка при сборке: Нет правила для сборки цели

141
15 декабря 2020, 19:30

Мой проект содержит подпроект spu-api. При сборке возникает ошибка:

/home/kiryanenko/clion-2019.1.2/bin/cmake/linux/bin/cmake --build /home/kiryanenko/Projects/graph-api/cmake-build-debug --target graph_api -- -j 2
[ 16%] Linking C++ static library libspu-api.a
[ 16%] Built target spu-api
[100%] Built target graph_api
Build finished

/home/kiryanenko/clion-2019.1.2/bin/cmake/linux/bin/cmake --build /home/kiryanenko/Projects/graph-api/cmake-build-debug --target main -- -j 2
[ 12%] Linking C++ static library libspu-api.a
[ 12%] Built target spu-api
[ 75%] Built target graph_api
make[3]: *** Нет правила для сборки цели «spu-api/libspu-api.a», требуемой для «main».  Останов.
CMakeFiles/Makefile2:110: recipe for target 'CMakeFiles/main.dir/all' failed
make[2]: *** [CMakeFiles/main.dir/all] Error 2
CMakeFiles/Makefile2:122: recipe for target 'CMakeFiles/main.dir/rule' failed
make[1]: *** [CMakeFiles/main.dir/rule] Error 2
Makefile:131: recipe for target 'main' failed
make: *** [main] Error 2

Вот структура проекта:

├── spu-api
│   ├── CMakeLists.txt
│   ├── cp_images_to_srv.sh
│   ├── help_srv.sh
│   ├── libspu
│   │   ├── base_structure.hpp
│   │   ├── data_container_operators.hpp
│   │   ├── errors
│   │   │   ├── could_not_create_structure.hpp
│   │   │   └── did_not_found_by_name.hpp
│   │   ├── fields_containers.hpp
│   │   ├── fields.hpp
│   │   ├── fileops.hpp
│   │   ├── libspu.hpp
│   │   ├── spu.h
│   │   └── structure.hpp
│   ├── spu.h
├── BaseGraph.cpp
├── BaseGraph.h
├── CMakeLists.txt
├── Edge.cpp
├── Edge.h
├── exceptions.h
├── main.cpp
├── Node.cpp
├── Node.h
├── SpuUltraGraph.cpp
├── SpuUltraGraph.h
└── types.h

Корневой файл /CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(graph_api)
set(CMAKE_CXX_STANDARD 14)
set(SPU_ARCH 64)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS} -DSPU${SPU_ARCH}")
include_directories(spu-api)
add_subdirectory(spu-api)
add_library(
        graph_api STATIC
        BaseGraph.cpp
        BaseGraph.h
        Node.cpp
        Node.h
        Edge.cpp
        Edge.h
        exceptions.h
        types.h
        SpuUltraGraph.cpp
        SpuUltraGraph.h
)
target_link_libraries(graph_api spu-api)
set(SOURCE_EXE main.cpp)
add_executable(main ${SOURCE_EXE})
target_link_libraries(main graph_api)

Файл подпроекта /spu-api/CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(spu-api)
set(CMAKE_CXX_STANDARD 14)
add_library(
        spu-api STATIC
        spu.h
        libspu/spu.h
        libspu/base_structure.hpp
        libspu/data_container_operators.hpp
        libspu/fields.hpp
        libspu/fields_containers.hpp
        libspu/fileops.hpp
        libspu/libspu.hpp
        libspu/structure.hpp
        libspu/errors/could_not_create_structure.hpp
        libspu/errors/did_not_found_by_name.hpp
)
SET_TARGET_PROPERTIES(spu-api PROPERTIES LINKER_LANGUAGE C++)

В чем может быть причина?

Answer 1

Если это header-only библиотека, то никакого объектного кода библиотеки в виде .a или .lib Вы не получите. Чтобы все заработало, рекомендую Вам удалить из корневого /CMakeLists.txt строчки:

add_subdirectory(spu-api)

и

target_link_libraries(graph_api spu-api)

а также файл подпроекта /spu-api/CMakeLists.txt

READ ALSO
xlib (или gtk). C++. Выделить окно

xlib (или gtk). C++. Выделить окно

Мое приложение шарит часть рабочего стола с окном какого-либо приложенияКогда эту шару кто-то просматривает, то на машине, на которой запущено...

146
Вопрос по заданию на С++ по библиотеке STL

Вопрос по заданию на С++ по библиотеке STL

Вот задание: Дан массив из N целых чиселНайти среднее арифметическое элементов массива, кратных числу k

132
Найти и заменить в строке заданное слово [закрыт]

Найти и заменить в строке заданное слово [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

113