make file starting out

Hi
I am new to setting up make files, and even newer to Boost. I've been using Geany on Ubuntu to learn Boost. When I compile and link using a single file with the following :
g++ -g -Wall -std=c++14 -o "%e" "%f" -lboost_thread -DBOOST_THREAD_VERSION=5 -lboost_system -ldl
then everything works as expected, for the following that is:
#include <iostream>
#include

AMDG On 08/07/2017 02:54 AM, Peter Koukoulis via Boost-users wrote:
<snip> g++ test_t.o t.o -o test_t test_t.o: In function `__static_initialization_and_destruction_0(int, int)': test_t.cpp:(.text+0x6e9): undefined reference to `boost::system::generic_category()' test_t.cpp:(.text+0x6f5): undefined reference to `boost::system::generic_category()'
The files look as follows:
# the makefile: CC=g++ CFLAGS=-c -Wall -std=gnu++14 -lboost_system -lboost_thread -DBOOST_THREAD_VERSION=5 -ldl -lpq all: test_t
test_t: t.o test_t.o $(CC) test_t.o t.o -o test_t
Libraries (-lboost_system) need to be passed to the linker, not the compiler. In Christ, Steven Watanabe

El 07/08/17 a las 05:54, Peter Koukoulis via Boost-users escribió:
The files look as follows:
# the makefile: CC=g++ CFLAGS=-c -Wall -std=gnu++14 -lboost_system -lboost_thread -ldl -lpq
CFLAGS=-c -Wall -std=gnu++14 -DBOOST_THREAD_VERSION=5 LDFLAGS= -lboost_system -lboost_thread -ldl -lpq -- Gonzalo Garramuño

On 07.08.2017 21:33, Gonzalo Garramuño via Boost-users wrote:
El 07/08/17 a las 05:54, Peter Koukoulis via Boost-users escribió:
The files look as follows:
# the makefile: CC=g++ CFLAGS=-c -Wall -std=gnu++14 -lboost_system -lboost_thread -ldl -lpq
CFLAGS=-c -Wall -std=gnu++14 -DBOOST_THREAD_VERSION=5 LDFLAGS= -lboost_system -lboost_thread -ldl -lpq
Yes, and LDFLAGS should then be used in test_t rule. But, both by convention and by implicit rules implementation, the C++ compiler is contained in CXX variable (and not CC, which is supposed to be C compiler) with its compile flags being stored in CXXFLAGS variable. By properly setting CPPFLAGS (preprocessor flags (-I, -D, ...) for both CC and CXX) , CXXFLAGS, and LDFLAGS you can build test_t purely by using implicit rules. Cheers, Leon
participants (4)
-
Gonzalo Garramuño
-
Leon Mlakar
-
Peter Koukoulis
-
Steven Watanabe