-m
フラグをg ++に追加すると、file format not recognized; treating as linker script
が発生し、リンク時に構文エラーが発生します。g ++に-Mフラグを追加すると、エラーが再検出されないファイル形式が発生する
私はこのメイクファイルを使用しています:src/src
で
# Compilers
CXX = g++
#CXX = clang++
CC = gcc
UNAME := $(shell uname)
# Directories used for input and output
SRCDIR = src/src
BUILDDIR = build
EXEDIR = bin
INCLUDEDIR = src/include
VERBOSE = 0
# Debug flags
ifeq ($(VERBOSE), 1)
CXX_FLAGS += -M
endif
# Enable all warnings but format and unused variables
CXX_FLAGS += -Wall -Wno-format -Wno-unused-variable -Wno-varargs -c -g -O0 -fbuiltin -fpermissive -std=c++14 -I include -I $(INCLUDEDIR)
OUTPUT_NAME = Test
# Where the sources are located
SRCS = $(wildcard $(SRCDIR)/*.cpp)
SRCS += $(wildcard $(SRCDIR)/*/*.cpp)
CSRCS = $(wildcard $(SRCDIR)/*.c)
# Where the compiled objects are located
OBJS = $(patsubst $(SRCDIR)/%.cpp, $(BUILDDIR)/%.o, $(SRCS))
COBJS = $(patsubst $(SRCDIR)/%.c, $(BUILDDIR)/%.o, $(CSRCS))
# Linking all the .o files and with the libs
build: $(OBJS) $(COBJS)
$(CXX) $^ $(LINKER_FLAGS) -o ./bin/$(OUTPUT_NAME)
# Compiling all the .cpp files into .o files
$(OBJS): $(BUILDDIR)/%.o : $(SRCDIR)/%.cpp
$(CXX) $(CXX_FLAGS) -o "[email protected]" "$<"
$(COBJS): $(BUILDDIRT)/%.o : $(SRCDIR)/%.c
$(CC) $(CC_FLAGS) -o "[email protected]" "$<"
# Running the created exe
.PHONY: run
run:
./$(EXEDIR)/$(OUTPUT_NAME)
は、私は2つのファイル、test.cpp
とfoo.cpp
を持っています。
test.cpp
:
#include "foo.h"
#include "cstdio"
int main(int argc, char* argv[]) {
Foo f;
int b = f.bar(2);
printf("%d", b);
return 0;
}
foo.cpp
:
#include "foo.h"
Foo::Foo() {
}
Foo::~Foo() {
}
int Foo::bar(int c) {
return c + c;
}
foo.cpp
ため.h
ファイルがsrc/include
である:
foo.h
:
/usr/bin/ls:build/foo.o: file format not recognized; treating as linker script
usr/bin/ld:build/foo.o:1: syntax error
make build
を呼び出す
は、コードの罰金をコンパイルし、私は4、期待する出力を得るしかし、(G用-Mフラグをオン++)make VERBOSE=1 build
を呼び出すことで、
私は-M
がプログラムの依存関係を出力すると考えていたので、なぜ-M
フラグを有効にするのがこれを引き起こすのか混乱しています。誰かが正しい方向に私を指すことができたら、私は本当にそれを感謝します。
これはうまくいきました。ありがとうございます:) – hdt80