【问题标题】:Using cmake on windows without IDE在没有 IDE 的 Windows 上使用 cmake
【发布时间】:2019-02-15 21:43:38
【问题描述】:

这可能是重复的,但我已经花了几个小时寻找答案......没有解决方案。首先,我知道如果我使用 Linux,这个问题可能不存在,但我在 Windows 上。

我对 c++ 还很陌生,但已经对 java 和 gradle 有了一些经验。我尝试使用 cmake,就像我习惯使用 gradle 一样。我已经阅读了 cmake wiki,但我要么找不到正确的页面,要么就是不明白。这是我的目录结构:

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)

我的 src 文件夹中的 CMakeLists.txt 如下所示:

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”,而“My Class”是从impl1.cpp创建的类的属性中打印的,但是它什么也没做。)需要澄清: 如何在控制台上构建一个要破坏的 windows .exe 文件?

编辑:

我了解到在创建 cmake 文件后,我必须在我的 bin 目录中调用 cmake --build .。但是我只是没有得到一个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 ```

【问题讨论】:

  • 在不使用 IDE 的情况下开始使用 c/c++ 是非常糟糕的体验,无论您的平台是什么。没有 linux 也不会让它变得更容易。我在 linux 上,我一直在为这些问题苦苦挣扎,不是几个小时,而是几个月,如果我算上我放弃这个的时间,也许还有几年:)

标签: c++ windows cmake


【解决方案1】:
  1. 使用 -G 选项是执行此操作的标准方法。它使您不必将系统特定的设置放入您的 CMake 配置(如 MingW 的硬编码路径),并允许您使用其他编译器而无需更改构建脚本。
  2. 您启动的a.exe 不是您的构建输出。它应该被称为MyProjectExec.exe。此外,您需要在对add_executable 的调用中指定所有源文件。 add_subdirectory 不会自动添加任何源文件(应该将它们添加到哪个构建输出?),它只是执行 CMakeLists.txt。

【讨论】:

  • 非常感谢。这已经有点帮助了。但是我仍然没有 .exe 文件来运行我的项目。现在它应该只在控制台上打印出 hello world。
  • 您正在为 src 目录中的 CMakeLists.txt 调用 CMake。试试cmake -G "MinGW Makefiles" ..。至于构建,cmake --build . 是独立于生成器的方式,但您也可以不带任何参数调用 mingw32-make。
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 2016-06-12
  • 2022-08-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多