我目前正在为我的简单c ++应用程序创建Makefile
。
目前,我想使用以下标题和链接器编译一个唯一的文件main.cpp
g++ main.cpp -L/usr/local/Cellar/boost/1.65.1/lib -I/usr/local/Cellar/boost/1.65.1/include -lboost_system
当我在终端中提示此命令时,一切正常。但是,当放入Makefile
SRC_FILES=main.cpp
LDLIBS=-L/usr/local/Cellar/boost/1.65.1/lib -I/usr/local/Cellar/boost/1.65.1/include
LD=-lboost_system
main.cpp:
g++ main.cpp ${LDLIBS} ${LD}
并尝试运行make -f Makefile main
,它不会编译。
Undefined symbols for architecture x86_64:
"boost::system::system_category()", referenced from:
boost::asio::error::get_system_category() in main-100974.o
___cxx_global_var_init.2 in main-100974.o
"boost::system::generic_category()", referenced from:
___cxx_global_var_init in main-100974.o
___cxx_global_var_init.1 in main-100974.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [main] Error 1
看起来参数未正确传递。
N.B:当我尝试运行
make -f Makefile main.cpp
时,编译器会告诉我main.cpp is already up-to-date
我认为我在Makefile
内做错了什么,但不知道是什么。
感谢您的帮助,
答案 0 :(得分:1)
在:
左侧的Makefile中,您定义了目标,而不是源:
main.cpp:
告诉make如何创建main.cpp,如果它不存在或比依赖项更旧(在右边:在你的情况下是什么)。您需要为程序命名并将其作为目标:
programname: main.cpp
g++ main.cpp ${LDLIBS} ${LD} -o programname