【发布时间】: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 个问题:
- (如何告诉 cmake 始终使用 MinGW?(我不想总是使用 -G))已解决
- (编译文件
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 上,我一直在为这些问题苦苦挣扎,不是几个小时,而是几个月,如果我算上我放弃这个的时间,也许还有几年:)