CMake не может видеть исходный файл, не может найти #includes

Robert Lewis спросил: 28 марта 2018 в 04:23 в: c++

Моя первая попытка использовать CLION (Mac) и корневую папку проекта CMake.My - /ref. Он помечен как источник root. Все папки исходного кода внутри /ref помечены как корневой каталог библиотеки, кроме /ref/src, где находится мой main.c.

Вот мой CMakeLists.txt:

cmake_minimum_required(VERSION 3.6)
project(miniFEPosit)
set(CMAKE_CXX_STANDARD 11)set(SOURCE_FILES /src/main.cpp)            # Add main.cpp file of project root directory
add_executable(miniFEPosit ${SOURCE_FILES})

Когда я пытаюсь построить, CLion говорит: "Не удается найти исходный файл: /src/main.cpp". Я получаю одно и то же сообщение, если попробую просто main.cpp.

Кроме того, в файле main.cpp все инструкции #include говорят: "can not найти "ссылочные, даже очевидные, такие как #include <iostream>.

Отдельно, может ли кто-нибудь порекомендовать хорошее место, чтобы узнать о CMake?

2 ответа

flaviodesousa ответил: 30 марта 2018 в 07:18

Измените /src на src. "/" Заставляет его искать каталог файлов в корневом каталоге.

set(SOURCE_FILES src/main.cpp)

Что касается включаемых файлов, вам нужно добавить предложение include_directories(), содержащее ваш проект. каталоги, которые содержат необходимые заголовочные файлы. Это позволяет cmake корректно предоставлять их make и компилятору.

Robert Lewis ответил: 28 марта 2018 в 04:35
Спасибо, это тоже сработало, и это также исправило некоторые из #includes (похоже, он получает стандартные и те, что находятся в папке src, но не те, что в других моих исходных папках, помеченных как"корень библиотеки") Допустимо ли иметь более одного из них? CLion не возражал.
Robert Lewis ответил: 28 марта 2018 в 04:52
Как отмечалось в моем ответе предыдущему комментатору, мне нужно было добавить include_directories() в CMakeLists.txt. Это исправило недостающие #include.
Robert Lewis ответил: 28 марта 2018 в 01:00
Мой исправленный файл CMakeLists.txt: make_minimum_required (VERSION 3.6) # Проект проверки версии CMake (miniFEPosit) # Создать набор"simple_example" проекта (CMAKE_CXX_STANDARD 11) # Включить стандартный набор c ++ 11 (SOURCE_FILES src / main.cpp) ) # Добавить main.cpp файл корневого каталога проекта в качестве исходного файла include_directories (основные утилиты fem posit) # попробовать это - работает add_executable (miniFEPosit $ {SOURCE_FILES}) # Добавить исполняемый целевой объект w
flaviodesousa ответил: 28 марта 2018 в 04:30
Просто добавьте ваш исправленный CMakeLists.txt в качестве собственного ответа. Добавление правильных комментариев. Это может быть полезно для других людей.
Есть решение
Robert Lewis ответил: 29 марта 2018 в 01:33

Вот исправленный файл CMakeLists.txt, в котором устранены проблемы:

cmake_minimum_required(VERSION 3.6)         # CMake version check
project(miniFEPosit)                        # Create project 
set(CMAKE_CXX_STANDARD 11)                  # Enable c++11 standardset(SOURCE_FILES src/main.cpp)              # Add src/main.cpp file of project root directory as source fileinclude_directories(basic fem posit utils)  # subdirectories of project root /ref add_executable(miniFEPosit ${SOURCE_FILES}) # Add executable target

Ключом к поиску main.cpp было удаление косой черты до src/main.cpp, что, очевидно, заставляет его ожидать абсолютного пути. И маркировка каталогов как "корень библиотеки" в CLion не вызывает их поиск; у вас должна быть команда include_directories(...). (Документация CLion, кажется, указывает, что маркировка каталога как library root должна работать, но, возможно, CMake и файл CMakeLists.txt переопределяют эту функцию - любая оценка приветствуется.)