compiler_depend.make:4: *** 出现了多个目标模式。停止。 (在使用cmake时的Windows路径问题)

编程语言 2026-07-10

我在Windows机器上编写C 代码,这是我的设置:

  1. 使用UCRT64环境的MSYS。
  2. VSCode
  3. CMake使用 "Unix Makefiles" 生成器进行构建

项目目录大致如下:

.vscode
build
scripts
src/lib
CMakeLists.txt
Variables.cmake

根目录下的CMakeLists.txt

# SPDX-License-Identifier: Unlicense
# Author: Derrick Lyndon Pallas <[email protected]>

cmake_minimum_required(VERSION 3.10)

set(PROJECT hangman )
project(${PROJECT} LANGUAGES C VERSION 1.0.0 DESCRIPTION "Fun hangman game")

# Get CFILES, HFILES, CFILES, HFILES, RCFILES variables
include("${CMAKE_CURRENT_SOURCE_DIR}/Variables.cmake")

#get internal library
add_subdirectory(src/lib)

add_executable(${PROJECT} ${CFILES} ${HFILES})
target_link_libraries(${PROJECT} PUBLIC libhangman)
target_include_directories(${PROJECT} PRIVATE src/lib/include)
//Variables.cmake

set( CFILES 
"src/core.c"
"src/words.c"
"src/main.c"
)

set( HFILES 
"src/core.h"
"src/words.h"
)

//  ./src/lib/Variables.cmake

set( CFILES 
    "utils/ft_strlen.c"
    "utils/ft_strcmp.c"
    "utils/ft_strlcpy.c"
    "utils/ft_atoi.c"
    "utils/ft_itoa.c"
    "utils/ft_get_next_line_one_byte.c"
    "printers/ft_printers.c"
    "printers/ft_putchar.c"
    "printers/ft_putnbr.c" 
    "printers/ft_putstr.c"
    "printers/ft_putchar_fd.c"
    "printers/ft_putstr_fd.c"
)

set( HFILES 
"include/utils.h"
"include/printers.h"
)

./src/lib/include/(*.h文件)

./src/lib/printers/(*.c文件)

./src/lib/utils/(*.c文件)

---> 这是./src/lib/CMakeLists.txt

# SPDX-License-Identifier: Unlicense
# Author: Derrick Lyndon Pallas <[email protected]>

cmake_minimum_required(VERSION 3.10)

set(LIB_NAME libhangman)

include("${CMAKE_CURRENT_SOURCE_DIR}/Variables.cmake")

add_library(${LIB_NAME} STATIC ${CFILES} ${HFILES})

target_include_directories(${LIB_NAME} PUBLIC include)

构建时可以正常构建,第一次用Make编译时没有问题,但在解决一个错误并进行第二次编译后,它给出以下错误

PS C:\Users\duria\projects\c\hangman\build> make

src/lib/CMakeFiles/libhangman.dir/compiler_depend.make:4: *** multiple target patterns.  Stop.

make[1]: *** [CMakeFiles/Makefile2:140: src/lib/CMakeFiles/libhangman.dir/all] Error 2

make: *** [Makefile:91: all] Error 2

查看有问题的那一行时:

/libhangman.dir/compiler_depend.make:4:
src/lib/CMakeFiles/libhangman.dir/printers/ft_printers.c.o: /c/Users/duria/projects/c/hangman/src/lib/printers/ft_printers.c \
  src/lib/C:/Users/duria/projects/c/hangman/src/lib/include/printers.h \
  src/lib/C:/Users/duria/projects/c/hangman/src/lib/printers/ft_printers.c \
  src/lib/C:/msys64/ucrt64/include/_mingw.h \ //<-- the windows Path "C:" is causing the issue
  src/lib/C:/msys64/ucrt64/include/_mingw_mac.h \
  src/lib/C:/msys64/ucrt64/include/_mingw_off_t.h \

对此有没有解决办法?

我想要构建的是一个可执行文件,它包含一个用于实用工具的内部库。

解决方案

错误之所以出现,是因为混合使用原生Windows环境和类POSIX环境

你需要只使用其中一个(推荐使用原生Windows)

打开MSYS2并运行以下命令

# installing native windows build tools
$ pacman -S mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-make

要在原生Windows环境中构建项目,你需要打开PowerShell或 VSCode的命令提示符(默认使用PowerShell)

然后运行以下命令:

> mkdir build
> cd build
# -G to force using MinGW Makefiles
> C:\msys64\ucrt64\bin\cmake .. -G "MinGW Makefiles"
> C:\msys64\ucrt64\bin\mingw32-make

此外,如果你想在PowerShell中仅使用 cmakemake 命令:

  1. 打开Windows设置 > 编辑环境变量,在 PATH 的开头处添加:
C:\msys64\ucrt64\bin;
  1. 打开MSYS2并运行以下命令:
$ cp /ucrt64/bin/mingw32-make /ucrt64/bin/make

现在你就可以在PowerShell中使用 cmakemake 命令

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章