Как заставить смешанный проект C / C ++ работать с использованием CMake - PullRequest
1 голос
/ 06 апреля 2019

У меня есть смешанный проект C / C ++, который я могу успешно скомпилировать и запустить, используя Makefile (если это необходимо, скажите, пожалуйста).Я хотел бы использовать CMake для создания проекта.Мой CMakeLists.txt выглядит следующим образом:

cmake_minimum_required(VERSION 3.13)
project(project_name)

set(CMAKE_CXX_STANDARD 11)

include_directories(include)

add_executable(main
        src/some_file.cpp
        src/other_file.c
        ... and so on
)

У меня в основном есть папка include / и src /, содержащая C и CPP исходные и заголовочные файлы соответственно.

Теперь в одном файле (утилит.hpp) Я включаю строку и вектор, как.

#include <string>
#include <vector>

При попытке собрать я получаю fatal error: 'string' file not found.Вместо этого я могу #include <string.h>, что устраняет ошибку, но затем я получаю fatal error: 'vector' file not found.Очень странное поведение.Я попытался настроить простой фиктивный проект с очень простым кодом

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<int> vec(3);
    std::cout << std::string("Hello, World!") << std::endl;
    return 0;
}

и самым простым CMakeLists.txt, добавив только цель для этого файла, как и выше, и все работает отлично.Так есть ли проблемы со смешением C / C ++?Что может вызвать эти проблемы?

Информация о компиляторе:

Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin18.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

РЕДАКТИРОВАТЬ: Добавление запрашиваемой информации.
Выход из make VERBOSE=Y на сгенерированный Makefile из CMake.

/usr/local/Cellar/cmake/3.14.1/bin/cmake -S/Users/matthausheer/university/howtowritefastnumericalcode/fastcode -B/Users/matthausheer/university/howtowritefastnumericalcode/fastcode/cmakebuild --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/Cellar/cmake/3.14.1/bin/cmake -E cmake_progress_start /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/cmakebuild/CMakeFiles /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/cmakebuild/CMakeFiles/progress.marks
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/Makefile2 all
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/benchmark.dir/build.make CMakeFiles/benchmark.dir/depend
cd /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/cmakebuild && /usr/local/Cellar/cmake/3.14.1/bin/cmake -E cmake_depends "Unix Makefiles" /Users/matthausheer/university/howtowritefastnumericalcode/fastcode /Users/matthausheer/university/howtowritefastnumericalcode/fastcode /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/cmakebuild /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/cmakebuild /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/cmakebuild/CMakeFiles/benchmark.dir/DependInfo.cmake --color=
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/benchmark.dir/build.make CMakeFiles/benchmark.dir/build
[ 14%] Building C object CMakeFiles/benchmark.dir/src/hgwosca.c.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc  -I/Users/matthausheer/university/howtowritefastnumericalcode/fastcode/include  -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk   -o CMakeFiles/benchmark.dir/src/hgwosca.c.o   -c /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/src/hgwosca.c
In file included from /Users/matthausheer/university/howtowritefastnumericalcode/fastcode/src/hgwosca.c:14:
/Users/matthausheer/university/howtowritefastnumericalcode/fastcode/include/utils.hpp:3:10: fatal error: 'string' file not found
#include <string>
         ^~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/benchmark.dir/src/hgwosca.c.o] Error 1
make[1]: *** [CMakeFiles/benchmark.dir/all] Error 2
make: *** [all] Error 2

Это мой CMakeLists.txt

cmake_minimum_required(VERSION 3.13)
project(fastcode)

set(CMAKE_CXX_STANDARD 11)

include_directories(include)

add_executable(benchmark
        src/benchmark.cpp
        src/hgwosca.c
        src/objectives.c
        src/penguin.c
        src/run_benchmark.cpp
        src/utils.cpp)

для следующих файлов, которые есть в моем проекте.

enter image description here

...