compiler_depend.make:4: *** 出现了多个目标模式。停止。 (在使用cmake时的Windows路径问题)
我在Windows机器上编写C 代码,这是我的设置:
- 使用UCRT64环境的MSYS。
- VSCode
- 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中仅使用 cmake 和 make 命令:
- 打开Windows设置 > 编辑环境变量,在
PATH的开头处添加:
C:\msys64\ucrt64\bin;
- 打开MSYS2并运行以下命令:
$ cp /ucrt64/bin/mingw32-make /ucrt64/bin/make
现在你就可以在PowerShell中使用 cmake 和 make 命令
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。