CMake терпит неудачу в сборке, потому что не может найти библиотеки STL - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь использовать файлы .c и .cpp в проекте Android Studio, я уже настраиваю CMakeList со всеми файлами, которые я включил.

Мой CMakeList выглядит так:

file(GLOB SOURCES "src/main/cpp/B/*.cpp")

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             src/main/cpp/native-lib.cpp
             src/main/cpp/A/B/src/a.c
             src/main/cpp/A/B/src/b.c
             src/main/cpp/A/B/src/c.c
             src/main/cpp/A/B/src/d.c
             src/main/cpp/A/a.cpp
             src/main/cpp/A/B/src/e.c
             src/main/cpp/B/a.cpp
             ${SOURCES})

Учитывая, что у меня есть такие каталоги:

    +--- /cpp
    |       +--- /A
    |       |    +--- /B      
    |       |    |     +--- /include
    |       |    |     |     +-- *.h
    |       |    |     +--- /src
    |       |    |           +-- *.c
    |       |    |
    |       |    |
    |       +--- /B
    |       |     +--- /include
    |       |     |     +-- *.h
    |       |     +--- /src
    |       |           +-- *.cpp

Когда я запускаю проект, я получаю это

../include/a.h:68:10: fatal error: 'algorithm' file not found

в a.h у меня есть это объявление

#include <algorithm> 

также, в одной строке, которую я имею: используя пространство имен std, IDE говорит, что использование не может разрешить тип

Я думаю, что cmake как бы неправильно смешивает файлы .c и .cpp.

1 Ответ

0 голосов
/ 11 января 2019

Вы включаете заголовок C ++ в исходный файл C (.c). Вы не можете ожидать gcc, компилятор исходного кода C, вызванный Cmake, когда он встречает .c, для понимания C ++.

Это работает в g++, потому что это компилятор C ++. Обратите внимание, g ++ будет обрабатывать .c файлы так, как если бы они были C ++ (так же, как и для .cxx и .cpp). CMake не делает этого, потому что существует много разных несовместимостей между C и C ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...