使无法在 OSX 上找到文件

make can't find files on OSX

本文关键字:文件 OSX      更新时间:2023-10-16

我在OSX上使用make和makefile时遇到问题。

我的错误:

clang: error: no such file or directory: '/Users/sduball/Documents/Programming/Cpp/ncurses_projects/tictactoe/source/main.cpp'
clang: error: no input files
make: *** [main.o] Error
  1. 仅当我使用 make 时才会发生错误
    • 我已经多次检查文件路径是否有效(文件确实存在)
    • 我已经在OSX上手动运行了g ++命令(并且它起作用了)
    • 我一直在我的 Ubuntu 桌面上使用相同的生成文件,非常好
  2. 这似乎是我的makefile上的变量以某种方式的错误
    • 从显示的makefile中,我尝试使程序没有文件配方中的变量,并且可以工作。
    • 我试过对我的变量声明使用 :=,但它不起作用
  3. 我很困惑,因为 clang 作为错误吐出的路径是有效的路径(我已经多次标记出路径并使用 vim 打开了确切的路径并且它有效)

我看到的关于此问题的唯一 SO 帖子是 xcode 项目在手动移动项目后找不到文件。我没有发现与我遇到的这个特定问题有关的任何内容。提前感谢您的帮助。

生成文件

##### VARIABLES #####
CXX = g++
CXXFLAGS = -Wall -g -std=c++14
DIR = ~/Documents/Programming/Cpp/ncurses_projects/tictactoe/
SOURCE = ~/Documents/Programming/Cpp/ncurses_projects/tictactoe/source/
BUILD = ~/Documents/Programming/Cpp/ncurses_projects/tictactoe/build/
##### TARGETS #####
# executable
copy: main.o game.o
$(CXX) $(CXXFLAGS) $(BUILD)main.o $(BUILD)game.o -lncursesw -o $(DIR)copy
# source
main.o: main.cpp game.h
$(CXX) $(CXXFLAGS) -c $(SOURCE)main.cpp -o $(BUILD)main.o
game.o: game.cpp game.h
$(CXX) $(CXXFLAGS) -c $(SOURCE)game.cpp -o $(BUILD)game.o

您需要在目标/依赖项行中使用目录变量,而不仅仅是命令行。

##### VARIABLES #####
CXX = g++
CXXFLAGS = -Wall -g -std=c++14
DIR = ~/Documents/Programming/Cpp/ncurses_projects/tictactoe/
SOURCE = ~/Documents/Programming/Cpp/ncurses_projects/tictactoe/source/
BUILD = ~/Documents/Programming/Cpp/ncurses_projects/tictactoe/build/
##### TARGETS #####
# executable
$(DIR)copy: $(BUILD)main.o $(BUILD)game.o
$(CXX) $(CXXFLAGS) $(BUILD)main.o $(BUILD)game.o -lncursesw -o $(DIR)copy
# source
$(BUILD)main.o: $(SOURCE)main.cpp $(SOURCE)game.h
$(CXX) $(CXXFLAGS) -c $(SOURCE)main.cpp -o $(BUILD)main.o
$(BUILD)game.o: $(SOURCE)game.cpp $(SOURCE)game.h
$(CXX) $(CXXFLAGS) -c $(SOURCE)game.cpp -o $(BUILD)game.o

根据@JonathanLeffler对原始问题的评论,我用 DIR = 替换了 DIR 路径。

DIR = ~/Documents/Programming/Cpp/ncurses_projects/tictactoe/

DIR = .

这完全解决了问题。源代码如下。

生成文件

##### VARIABLES #####
CXX = g++
CXXFLAGS = -Wall -g -std=c++14
DIR = .
SOURCE = $(DIR)/source
BUILD = $(DIR)/build

##### TARGETS #####
# executable
copy: $(BUILD)/main.o $(BUILD)/game.o
$(CXX) $(CXXFLAGS) $(BUILD)/main.o $(BUILD)/game.o -lncursesw -o $(DIR)/copy
# source
main.o: $(SOURCE)/main.cpp $(SOURCE)/game.h
$(CXX) $(CXXFLAGS) -c $(SOUCE)/main.cpp -o $(BUILD)/main.o
game.o: $(SOURCE)/game.cpp $(SOURCE)/game.h
$(CXX) $(CXXFLAGS) -c $(SOURCE)/game.cpp -o $(BUILD)/game.o