Использование cmake на окнах без IDE - PullRequest
0 голосов
/ 16 февраля 2019

это может быть дубликатом, но я уже потратил пару часов на поиск ответа ... без решения.Прежде всего я знаю, что эта проблема может не существовать, если бы я использовал Linux, но я на Windows.

Я довольно новичок в c ++, но уже получил некоторый опыт работы с Java и Gradle.Я пытаюсь использовать cmake так же, как я привык использовать gradle.Я уже читал вики cmake, но я не нахожу правильных страниц или просто не понимаю.Вот моя структура каталогов:

MyProject
-bin
-include
--header1.h
--header2.h
--header3.h
--header4.h
--header5.h
--header6.h
-src
--CMakeLists.txt
--MyProjectConfig.h.in
--impl1.cpp
--impl2.cpp
--impl3.cpp
--impl4.cpp
--impl5.cpp
--impl6.cpp
-main.cpp
-CMakeLists.txt

Мой CMakeLists.txt в папке моего проекта выглядит так:

cmake_minimum_required (VERSION 3.14)

project (MyProject)
add_subdirectory(src)

file(GLOB_RECURSE sources      src/*.cpp include/*.h)

# The version number.
set (Tutorial_VERSION_MAJOR 0)
set (Tutorial_VERSION_MINOR 1)


# configure a header file to pass some of the CMake settings
# to the source code
configure_file (
  "${PROJECT_SOURCE_DIR}/MyProjectConfig.h.in"
  "${PROJECT_BINARY_DIR}/MyProjectConfig.h"
  )

# add the binary tree to the search path for include files
# so that we will find MyProjectConfig.h
include_directories("${PROJECT_BINARY_DIR}")  

install (FILES "${PROJECT_BINARY_DIR}/MyProjectConfig.h"        
         DESTINATION include)

add_executable(MyProject main.cxx ${sources})

# add the install targets
install (TARGETS MyProject DESTINATION bin)

Мой CMakeLists.txt в папке src выглядит так:

cmake_minimum_required (VERSION 3.14)

include_directories(${MyProject_SOURCE_DIR}/MyProject/include)

Я использую команду в каталоге bin bin: cmake -G "MinGW Makefiles" -S ../src

Сейчас у меня есть 2 вопроса:

  1. (Как мне сказать cmake всегда использовать MinGW?(Я не хочу использовать -G всегда)) решено
  2. (скомпилированный файл build\CMakeFiles\3.14.0-rc2\CompilerIdCXX\a.exe не имеет ожидаемого поведения. Он должен вывести «Hello world!» И «My Class», while »Мой класс "выводится из атрибута класса, созданного из impl1.cpp, однако он ничего не делает.) Нуждается в уточнении: Как мне создать .exe-файл windows для разрушения на консоли?

Редактировать:

Я узнал, что после создания файлов cmake мне нужно вызвать cmake --build . в моей папке bin.Однако я просто не получаю exe-файл.С флагом -v я получаю этот вывод:

"C:\Program Files\CMake\bin\cmake.exe" -SD:\git\MyProject\src -BD:\git\MyProject\bin --check-build-system CMakeFiles\Makefile.cmake 0
"C:\Program Files\CMake\bin\cmake.exe" -E cmake_progress_start D:\git\MyProject\bin\CMakeFiles D:\git\MyProject\bin\CMakeFiles\progress.marks
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 all
mingw32-make.exe[1]: Entering directory 'D:/git/MyProject/bin'
mingw32-make.exe[1]: Nothing to be done for 'all'.
mingw32-make.exe[1]: Leaving directory 'D:/git/MyProject/bin'
"C:\Program Files\CMake\bin\cmake.exe" -E cmake_progress_start D:\git\MyProject\bin\CMakeFiles 0 ```

1 Ответ

0 голосов
/ 16 февраля 2019
  1. Использование опции -G является стандартным способом сделать это.Он предотвращает необходимость установки системных настроек в конфигурацию CMake (например, жестко заданные пути к MingW) и позволяет использовать другие компиляторы без необходимости изменения сценариев сборки.
  2. Запущенный a.exe не являетсяваш результат сборки.Он должен называться MyProjectExec.exe.Также вам нужно указать все исходные файлы в вашем звонке на add_executable.add_subdirectory не добавляет автоматически какие-либо исходные файлы (к каким выводам сборки он должен их добавить?), Он просто выполняет CMakeLists.txt.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...