问题描述
编写了一个项目,使用CMake进行构建,随后使用Make进行编译,编译时提示找不到"libjsh.dll.a",可是我并没有编写任何一个这样的库,项目也没有任何一个地方引用了这个库。
CMakeLists.txt:
# The CMake file
cmake_minimum_required (VERSION 3.27 FATAL_ERROR )
project (JuRuoqwqShell)
# 设置STDC++17标准(filesystem库)
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置编译器
set (CMAKE_CXX_COMPILER clang++)
# 设置构建输出目录
set(OUTPUT_DIR "${CMAKE_BINARY_DIR}/out/")
# 设置源文件
set (CMDS src/cmds) # 图省事qwq
set (SOURCE_FILE
src/jsh.cpp
src/cmd_index.cpp
src/logger.cpp
src/parse_cmd.cpp
${CMDS}/cmd_cat.cpp
${CMDS}/cmd_cd.cpp
${CMDS}/cmd_ls.cpp
${CMDS}/cmd_pwd.cpp
${CMDS}/cmd_rm.cpp
${CMDS}/jsh_cmds.cpp
)
# 生成二进制文件
add_executable (jsh ${SOURCE_FILE})
编译信息:
LINK : fatal error LNK1181: 无法打开输入文件“libjsh.dll.a”
clang++: error: linker command failed with exit code 1181 (use -v to see invocation)
另一种编译方法
编写了一个sh脚本,可以编译,说明代码没有问题,但是使用CMake构建出错,如何解决?
Shel脚本
rm -rf out/*
mkdir out
clang++ -c src/jsh.cpp -o jsh.o -std=c++17
echo Built jsh
clang++ -c src/cmd_index.cpp -o cmd_index.o -std=c++17
echo Built cmd_index
clang++ -c src/logger.cpp -o logger.o -std=c++17
echo Built logger
clang++ -c src/parse_cmd.cpp -o parse_cmd.o -std=c++17
echo Built parse_cmd
clang++ -c src/cmds/cmd_cat.cpp -o cmd_cat.o -std=c++17
echo Built cmd_cat
clang++ -c src/cmds/cmd_cd.cpp -o cmd_cd.o -std=c++17
echo Built cmd_cd
clang++ -c src/cmds/cmd_ls.cpp -o cmd_ls.o -std=c++17
echo Built cmd_ls
clang++ -c src/cmds/cmd_pwd.cpp -o cmd_pwd.o -std=c++17
echo Built cmd_pwd
clang++ -c src/cmds/cmd_rm.cpp -o cmd_rm.o -std=c++17
echo Built cmd_rm
clang++ -c src/cmds/jsh_cmds.cpp -o jsh_cmds.o -std=c++17
echo Built jsh_cmds
clang++ jsh.o cmd_index.o logger.o parse_cmd.o cmd_cat.o cmd_cd.o cmd_ls.o cmd_pwd.o cmd_rm.o jsh_cmds.o -o jsh.exe -std=c++17
move jsh.exe out/
rm -rf *.o
./out/jsh