Задать вопрос

Как правильно составить файл CMakeLists.txt для проекта?

При сборке проекта в файле CMakeLists.txt возникает ошибка.
пользовательская сборка для "D:\Program Files\Git Repository\test\build\CMakeFiles\f8693ea406bc8edd94620eee72508140\generate.stamp.rule" завершила работу с кодом 1.
Код:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)


set(PROJECT_NAME test)
project(${PROJECT_NAME})

find_package(SFML REQUIRED COMPONENTS graphics window system audio network)
 find_package(imgui CONFIG REQUIRED)

set(CMAKE_CXX_STANDARD 17)

add_executable(${PROJECT_NAME}
src/main.cpp 
src/Engine.cpp
src/Engine.h
src/Timer.cpp
src/Timer.h
src/Cube.cpp
src/Cube.h
src/MyContactListener.cpp
src/MyContactListener.h
src/InclusionHeaders.h
src/GUI.cpp
src/GUI.h
src/FlagManager.h
src/FlagManager.cpp
)

target_link_libraries(${PROJECT_NAME} 
sfml-graphics
sfml-window
sfml-system 
sfml-audio 
sfml-network 
PRIVATE imgui::imgui)

)
  • Вопрос задан
  • 56 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
mexahuk6
@mexahuk6
Специалист по компьютерной технике.
Ваш файл CMakeLists.txt содержит несколько ошибок, которые могут вызывать проблемы при сборке. Вот исправленный и улучшенный пример CMakeLists.txt, который должен работать корректно:

Исправленный код CMakeLists.txt
cmake
Копировать код
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

# Название проекта
set(PROJECT_NAME test)
project(${PROJECT_NAME})

# Установим стандарт C++
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Найти SFML
find_package(SFML REQUIRED COMPONENTS graphics window system audio network)
if(NOT SFML_FOUND)
message(FATAL_ERROR "SFML не найден. Убедитесь, что он установлен и доступен.")
endif()

# Найти ImGui
find_package(imgui CONFIG REQUIRED)
if(NOT imgui_FOUND)
message(FATAL_ERROR "ImGui не найден. Убедитесь, что он установлен и доступен.")
endif()

# Указываем исходные файлы
set(SOURCES
src/main.cpp
src/Engine.cpp
src/Timer.cpp
src/Cube.cpp
src/MyContactListener.cpp
src/GUI.cpp
src/FlagManager.cpp
)

set(HEADERS
src/Engine.h
src/Timer.h
src/Cube.h
src/MyContactListener.h
src/InclusionHeaders.h
src/GUI.h
src/FlagManager.h
)

# Создаем исполняемый файл
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})

# Линкуем библиотеки
target_link_libraries(${PROJECT_NAME}
PRIVATE
sfml-graphics
sfml-window
sfml-system
sfml-audio
sfml-network
imgui::imgui
)

# Включаем пути к заголовочным файлам
target_include_directories(${PROJECT_NAME} PRIVATE src)
Основные исправления:
Версия CMake:

Указана версия 3.10, так как версия 2.8 устарела и не поддерживает современные возможности (например, стандарт C++17).
Проверка зависимостей:

Добавлены проверки на наличие SFML и ImGui. Если они не найдены, CMake выдаст понятное сообщение об ошибке.
Удалены лишние скобки:

Лишняя закрывающая скобка ) в конце файла удалена.
Структура проекта:

Список исходных и заголовочных файлов разделен на две переменные SOURCES и HEADERS для лучшей читаемости.
Пути к заголовочным файлам:

Добавлена команда target_include_directories для указания CMake, где искать заголовочные файлы.
Совместимость с C++17:

Использована команда set(CMAKE_CXX_STANDARD_REQUIRED ON) для обязательного использования стандарта C++17.
Рекомендации:
Убедитесь, что SFML и ImGui установлены и доступны CMake. Для Windows можно использовать vcpkg или CMake presets для упрощения настройки окружения.
Проверьте пути к исходным файлам и их правильность. Убедитесь, что все файлы действительно существуют.
Попробуйте использовать этот исправленный файл CMakeLists.txt. Если проблема сохранится, уточните текст ошибки, чтобы можно было помочь с её устранением.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы