make无法在OSX上找到文件

时间:2018-01-20 02:00:21

标签: c++ macos makefile

我在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桌面上使用相同的makefile
  2. 这似乎是我的makefile上的变量以某种方式出错
    • 从显示的makefile我尝试使用我的文件配方中的变量来编写程序,并且它可以正常工作。
    • 我尝试过使用:=我的变量声明,但它不起作用
  3. 我很困惑,因为clang作为错误吐出的路径是一个有效路径(我已多次勾选路径并打开vim的确切路径并且它有效)
  4. 我见过的关于此问题的唯一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
    

2 个答案:

答案 0 :(得分:0)

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

##### 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

答案 1 :(得分:0)

根据@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