从现有 cmake 应用程序导入的 Netbeans 项目无法在 Windows 上构建并出现文件系统错误

Posted

技术标签:

【中文标题】从现有 cmake 应用程序导入的 Netbeans 项目无法在 Windows 上构建并出现文件系统错误【英文标题】:Netbeans project imported from existing cmake application fails to build with filesystem error on Windows 【发布时间】:2015-03-01 22:37:17 【问题描述】:

我正在尝试将我在其他 IDE 中使用的手动创建的 cmake 项目导入 Windows 7 上的 Netbeans 8.0.2。不用说,我的 cmake 配置在那里运行良好。

Netbeans 似乎可以很好地导入目录。我以“自动”(cmake)模式导入它。但是,当我尝试构建项目时,我收到一条相当神秘的(Java?)错误消息:

Makefile:76: recipe for target 'all' failed
process_begin: CreateProcess(NULL, /C/MinGW/bin/make.exe -f CMakeFiles/Makefile2 all, ...) failed.
make (e=2): The system cannot find the file specified.

对Java知之甚少,不知道如何解释这个错误。第一个目录 (/C/MinGW/bin/make.exe) 在我看来不是 Windows 格式,但我不确定这是否不正确。我确实有一个同名的文件,因为我复制了名称较长的 mingw make 二进制文件,所以我只需要输入“make”。

假设这是在项目根目录中运行,并且第一个目录的格式正确,我认为查找这些文件没有任何问题。

我的 CMakeLists.txt 是:

cmake_minimum_required(VERSION 2.8.4)

set(Project_Name "Test")
set(Test_VERSION_MAJOR 1)
set(Test_VERSION_MINOR 0)

project($Project_Name)

include_directories(
    "$CMAKE_CURRENT_SOURCE_DIR/inc"
    "$CMAKE_CURRENT_SOURCE_DIR/inc/SDL"
    "C:/Users/Bakaiya/Documents/ogre/OgreMain/include"
)
file(GLOB SOURCE_FILES "$CMAKE_CURRENT_SOURCE_DIR/src/*.cpp")

link_directories($CMAKE_CURRENT_SOURCE_DIR $OPENGL_LIBRARIES)

set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")
add_executable($Project_Name $SOURCE_FILES)
target_link_libraries($Project_Name SDL2main SDL2 OgreMain) #Ogre

在 IDE 中运行“生成 makefile”命令没有问题,但不能解决问题。此外,清理失败,但“帮助”确实有效。

这似乎是 IDE 中的一个问题,因为如果我从项目根目录中的命令行运行 make,它会毫无问题地构建。

另外,我在 C/C++ -> 项目选项下修改了文件路径模式设置,但它什么也没做。即使设置为绝对,似乎是相对路径(CMakeFiles/Makefile2)仍然在失败的命令中。我不确定该选项是否会改变这种参考。

这个导入的项目有什么问题会导致这个问题?

【问题讨论】:

【参考方案1】:

但是,当我尝试构建项目时,我收到一条相当神秘的(Java?)错误消息:

这是 netbeans 显示的错误,告诉您它无法成功执行 make 命令。通常这表明您的 (mingw-) 工具设置错误。

您可以检查以下几点:

    不要使用来自mingw/binmake,你必须使用来自mingw/msys/.. 的那个。在 mingw 的 msys 文件夹中有一个 mingw make,通常是C:\<Path to MSYS>\<Version>\bin\make.exe - 这个bin-path 也必须在 PATH 环境变量中设置!如果 MSys 未与您的 mingw 一起安装,请安装它。 请检查Tools -> Options -> C/C++ -> Build Tools中设置的工具;您可以点击Versions... 对其进行测试。 (如果存在)清理 CMake 生成的 文件并清理 cmake 的缓存。如果尚未完成,请按照here 的说明使用源外构建。 您可以从终端构建您的项目(不使用 netbeans)吗?

第一个目录 (/C/MinGW/bin/make.exe) 在我看来不是 Windows 格式,但我不确定这是否不正确。

这没问题,是 mingw 的意图 - 它使用类似 linux / unix 的路径。


更新

我应该使用哪个make程序?

很多 MinGW 用户有一个问题,因为他们使用 mingw32-make.exe 从 MinGW 安装。虽然这似乎是正确的选择,但它 实际上破坏了构建。问题是这是一个非Posix Unix make 程序的实现,根本无法正常工作。 其实这就是MinGW人改名的原因!他们还制作了一个 常见问题解答条目解释了为什么不应该使用 mingw32-make.exe。反而, 您应该使用 MSYS 包中的 make.exe 程序。

从 NetBeans 6.1 开始,“构建工具”面板不再允许用户 选择 mingw32-make。如果您选择 MinGW 编译器集合,它将 默认在 MSYS 中制作。如果没有找到 MSYS,它会告诉你没有 已找到make程序。

(http://wiki.netbeans.org/MinGWInCCDevelopmentPack)

【讨论】:

感谢您的建议!将其设置为 msys' make 立即解决了问题。如果这种事情再次发生,以供将来参考,是否有某些原因使用 msys make 而不是 mingw make?我相信我的上一个 IDE 使用了 mingw 的 make,但我不确定。 默认的 mingw makenon-POSIX 实现(它是 Win32 Make!?)但 MSys 是。由于大多数时候都需要兼容 posix 的 make,所以第一个失败。 我已经用 NB wiki 的一个很好的解释更新了我的答案;页面本身是关于 NB 5.x / 6.x 但答案仍然有效。

以上是关于从现有 cmake 应用程序导入的 Netbeans 项目无法在 Windows 上构建并出现文件系统错误的主要内容,如果未能解决你的问题,请参考以下文章

CMake 访问 SWIG 并将 java 库链接到现有 C++ 项目的问题

如何分析netbean module之间的调用关系

NetBean常用快捷键(MAC中)

Windows 上的 CMake - 使用导入的目标 OpenGL::GLU 时 FindOpenGL.cmake 中的错误?

将查询结果从 mysql 导入现有 hive 表的问题

用于链接OpenCV和现有库的Makefile(不使用cmake)