c - CMake 无法在 Windows 上创建 MakeFile
问题描述
当我尝试运行cmake
时,它确实生成了一堆文件,但没有创建 MakeFile。
CMakeLists.txt
PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main ${DIR_SRCS})
主程序
int main()
{
return 0;
}
cmake
在cmd中运行后,它给了我这个
E:\practiceFolder\cake>cmake .
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18362.
-- The C compiler identification is MSVC 19.21.27702.2
-- The CXX compiler identification is MSVC 19.21.27702.2
-- Check for working C compiler: D:/VisualStudio2019/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: D:/VisualStudio2019/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: D:/VisualStudio2019/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: D:/VisualStudio2019/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: E:/practiceFolder/cake
之后生成一些文件
E:.
│ ALL_BUILD.vcxproj
│ ALL_BUILD.vcxproj.filters
│ CMakeCache.txt
│ CMakeLists.txt
│ cmake_install.cmake
│ main.c
│ main.sln
│ main.vcxproj
│ main.vcxproj.filters
│ ZERO_CHECK.vcxproj
│ ZERO_CHECK.vcxproj.filters
│
└─CMakeFiles
│ cmake.check_cache
│ CMakeOutput.log
│ generate.stamp
│ generate.stamp.depend
│ generate.stamp.list
│ TargetDirectories.txt
│
├─3.16.2
and some other files
在其中找不到 MakeFile。可能这里有一些明显的错误,但我就是找不到。我已经被困在这里几个小时了,任何帮助将不胜感激,谢谢!
解决方案
在类 Unix 平台中,默认运行cmake
然后make
创建 Makefile。在 Windows 上不是这种情况。
在 Windows 上,CMake 默认生成一个 MSVC 解决方案。检查.sln
构建目录中的文件。
如果您确实需要 Windows 上的 Makefile,请添加-G "Unix Makefiles"
到该cmake
行。
如果您想使用 MSVC 作为编译器但在命令行上工作,另一个选项是-G "NMake Makefiles"
, 并在此之后调用make
。
确保在尝试构建新的生成器目标之前删除您的构建目录。CMake 可能对此很敏感。
检查cmake --help
可用选项的列表。(特别是生成器目标是特定于平台的。)
推荐阅读
- c++ - 如何引用基类的派生类?
- php - Laravel 在删除关系时触发模型事件
- azure - 通过 AKS 群集中的负载均衡器访问服务
- puppeteer - puppeteer goto方法不在camelcase中?
- javascript - 如何修复 uglifyjs 给我创建捆绑包的名称错误?
- html - 为什么我不能让我的网页上的这个空白区域消失?
- google-chrome - 在我打开 Devtools (F12) 菜单之前,不会加载 Google Chrome 覆盖
- r - 试图查看 emmeans 中的交互图 - 由于 emmip 中缺少参数而导致的错误?
- joomla - Joomla 中使用的 PHP 方法是什么(OOP 或程序)?
- android - 别名的 Room/SQLite 静态值