在 Atom 的 .atom-build.yml 中使用 space 传递参数

Passing args with space in Atom's .atom-build.yml

Atom Build package 使用 .atom-build.yml 文件来指定项目构建目标,因此我创建了简单的 .atom-build.yml 来满足我的需要。一切正常,除了一小部分。在其上下文下方:

targets:
    Run CMake for Windows:
        cmd: "cmake"
        atomCommandName: "Create Makefiles with CMake"
        args:
            - "-Bbuild"
            - "-H."
            - "-G\"MinGW Makefiles\""

在这个特定的目标中,我想调用 cmake,因为 Build CMake 不起作用,或者我不知道如何使用它。使用时,Build package 运行s cmd /C to 运行 command written after cmd: with arguments args:.因此,Atom 中显示的调用是:

cmd /C cmake -Bbuild -H. -G"MinGW Makefiles"

使用 -G 选项我定义了目标 make 环境,默认情况下是 NMake Makefiles,我想要 MinGW Makefiles。在 运行ning 上面的目标之后,cmake 抛出错误:

CMake Error: Could not create named generator "MinGW

... 并列出所有可用的生成器。显然,MinGW Makefiles 中的 space 使得 Makefiles 被理解为下一个参数。我尝试用 \^ 转义它,但它不起作用。另外,我尝试将 args 移动到 cmd 字段,就像从单个命令行调用 运行 一样。

我的问题是: 如何 运行 cmake 使用 Atom 构建包将 -G 选项传递给 [=18] =] 正确吗?


编辑:

使用 '-G "MinGW Makefiles"' 错误仍然存​​在。

使用 "-G ""MinGW Makefiles""" Atom 抛出错误:

bad indentation of a sequence entry at line 15, column 19:
                - "-G""MinGW Makefiles"""
                      ^

我找到了 运行 cmake 的其他方法,参数如上所述。我创建了 PreLoad.cmake 个文件,包括:

set (CMAKE_MAKE_PROGRAM "C:/Program\ Files\ (x86)/GnuWin32/bin/make.exe" CACHE INTERNAL "" FORCE)
set (CMAKE_GENERATOR "MinGW Makefiles" CACHE INTERNAL "" FORCE)
set (EXECUTABLE_OUTPUT_PATH "build" CACHE INTERNAL "" FORCE)

此文件由 cmake 在 CMakeLists.txt 之前调用,因此它会覆盖默认的 cmake 设置。其次,我修改了.atom-build.yml:

cmd: "g++"
atomCommandName: "Compile and run with g++"
name: "Compile and run single file C++ project"
args:
    - "{FILE_ACTIVE}"
    - "-o {FILE_ACTIVE_PATH}/application.exe &&"
    - "{FILE_ACTIVE_PATH}/application.exe"
targets:
    Run CMake:
        cmd: "cmake ."
        atomCommandName: "Create Makefiles with CMake"
    Build Makefile project:
        atomCommandName: "Make all"
        cmd: "make"
        args:
            - "-j4"
            - "all"
    Run application:
        atomCommandName: "Run application"
        cmd: "{FILE_ACTIVE_PATH}/build/application.exe"
    Full CMake build:
        atomCommandName: "Full CMake build"
        cmd: "cmake . && make -j4 all && {FILE_ACTIVE_PATH}/build/application.exe"

工作 几乎 完美 - Atom 构建包不支持输入。


运行:

cmd /C cmake -Bbuild -H. -G"MinGW Makefiles" -DCMAKE_MAKE_PROGRAM=make

直接从命令提示符(或没有cmd /C),工作。然而从 Atom 我得到:

The system cannot find the path specified.

这是 cmd 错误。我不知道为什么它会持续存在。

我在搜索类似问题的解决方案时遇到了您的 post。我试图将 makefile 目标添加为命令。经过多次尝试,终于成功了。

cmd: "C:/WinAVR-20100110/utils/bin/make.exe all"
name: all

errorMatch:
  - (?<file>[0-9a-zA-Z_]+\.+[cC]):(?<line>\d+):\s+(?<message>.+)
targets:
    build all:
        cmd: "C:/WinAVR-20100110/utils/bin/make.exe all"
    clean and rebuild:
        cmd: "C:/WinAVR-20100110/utils/bin/make.exe rebuild"
    clear artifacts:
        cmd: "C:/WinAVR-20100110/utils/bin/make.exe clean"

这里的想法是将参数作为命令本身的一部分而不是作为单独的参数传递。