带有头文件和链接器的Makefile

时间:2017-10-31 14:03:40

标签: c++ makefile linker

我目前正在为我的简单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内做错了什么,但不知道是什么。

感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

:左侧的Makefile中,您定义了目标,而不是源:

main.cpp:

告诉make如何创建main.cpp,如果它不存在或比依赖项更旧(在右边:在你的情况下是什么)。您需要为程序命名并将其作为目标:

programname: main.cpp
      g++ main.cpp ${LDLIBS} ${LD} -o programname