所以我的任务很简单,我已经创build了makefile(使用makefiles新build),并且希望将我的.o文件保存在不同的文件夹中,使其具有更清晰的目录,并允许其他人使用.o文件。
我search并find了许多指向使用-o $ <$ @
但是,它给了我g++: cannot specify -o with -c or -S with multiple files
这是我想要做的:
lib {库名} .a / .so是Linux中静态库的命名约定吗?
.NET / Windows Server中的最大传出套接字连接
为什么告诉我“命令未find”?
Windows和* nix编译检测
$(OBJECT_PATH)/file1.o: $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp $(CC) $(CFLAGS) $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp -o $@
file1.cpp有#include“file1.h”,所以从我读的我应该包括file1.cpp的依赖。 但是,现在我不能导出到不同的目录。
使用c / c ++编写的共享库的Linux C程序
Makefile和QTCreator
使用cmake构build可执行文件和共享库,runtimelinker找不到dll
在Windows中运行Eclipse C ++中的Hello World应用程序
使安装错误“无事可做”
使用make -d或者更好的重制 -x来理解哪些命令被调用。
运行也可以make -p了解使用了哪些内置规则。
我们无法帮助您,因为我们不知道您是否重新定义了CFLAGS 。
和C ++编译应该更好地使用CXX g++和CXXFLAGS g++ ,例如(我从我的make -p输出中提取这个)
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c CXX = g++ %.o: %.cc $(COMPILE.cc) $(OUTPUT_OPTION) $<
我强烈建议至少在开发阶段有CXXFLAGS= -Wall -g 。 学习使用gdb和valgrind 。
你可以在你的Makefile有以下内容
CXXFLAGS= -g -Wall SOURCES=f1.cc f2.cc SOURCE_PATH=yoursourcedir/ OBJECT_PATH=yourobjectdir/ SRCFILES=$(patsubst %.cc,$(SOURCE_PATH)/%.cc,$(SOURCES)) OBJFILES=$(patsubst %.cc,$(OBJECT_PATH)/%.o,$(SOURCES)) PROGFILE=$(OBJECT_PATH) .PHONY: all clean all: $(PROGFILE) $(PROGFILE): $(OBJFILES) $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@ $(OBJECT_PATH)/%.o: $(SOURCE_PATH)/%.cc $(COMPILE.cc) $(OUTPUT_OPTION) $< clean: $(RM) $(OBJECT_PATH)/*.o $(PROGFILE)
尝试
$(OBJECT_PATH)/file1.o: $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp $(CC) $(CFLAGS) $^ -c $@
并检查CFLAGS是否不包含-o -c或-s标志
也读了关于隐式规则。 它可能会帮助你改变你的makefile文件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。