I have a problem when I compile my program, I have been trying some solutions on Questions but it doesnt work for me, so here is my problem
INCLUDE = include
LIB = lib
OBJ = obj
SRC = src
BIN = bin
CXX = g++
CPPFLAGS = -Wall -g -c
$(BIN)/pruebacronologia : $(OBJ)/pruebacronologia.o
$(CXX) -o $(BIN)/pruebacronologia $(OBJ)/EventoHistorico.o $(SRC)/EventoHistorico.cpp -I$(INCLUDE)
$(OBJ)/EventoHistorico.o : $(SRC)/EventoHistorico.cpp
$(CXX) $(CPPFLAGS) -o $(OBJ)/EventoHistorico.o $(SRC)/EventoHistorico.cpp -I$(INCLUDE)
$(OBJ)/cronologia.o : $(SRC)/cronologia.cpp $(OBJ)/EventoHistorico.o
$(CXX) $(CPPFLAGS) -o $(OBJ)/cronologia.o $(SRC)/cronologia.cpp $(OBJ)/EventoHistorico.o -I$(INCLUDE)
$(OBJ)/pruebacronologia.o : $(SRC)/pruebacronologia.cpp $(OBJ)/cronologia.o
$(CXX) $(CPPFLAGS) -o $(OBJ)/pruebacronologia.o $(SRC)/pruebacronologia.cpp $(OBJ)/cronologia.o $(OBJ)/EventoHistorico.o -I$(INCLUDE)
Then i get this error on bash:
g++: warning: obj/cronologia.o: linker input file unused because linking not done
g++: warning: obj/EventoHistorico.o: linker input file unused because linking not done
g++ -o obj/EventoHistorico.o -Iinclude
g++: fatal error: no input files
compilation terminated.
make: *** [bin/pruebacronologia] Error 4
Your makefile seems to be not well construct. For each target .o, just set a .o compiled from the corresponding .c file.
To contruct the executable, just append all .o generated.
I think something like this will work better :
INCLUDE = include
LIB = lib
OBJ = obj
SRC = src
BIN = bin
CXX = g++
CPPFLAGS = -Wall -g -c
$(BIN)/pruebacronologia : $(OBJ)/cronologia.o $(OBJ)/pruebacronologia.o $(OBJ)/EventoHistorico.o
$(CXX) -o $(BIN)/pruebacronologia $^ $(LDFLAGS)
$(OBJ)/EventoHistorico.o : $(SRC)/EventoHistorico.cpp
$(CXX) $(CPPFLAGS) -o $(OBJ)/EventoHistorico.o $(SRC)/EventoHistorico.cpp -I$(INCLUDE)
$(OBJ)/cronologia.o : $(SRC)/cronologia.cpp
$(CXX) $(CPPFLAGS) -o $(OBJ)/cronologia.o $(SRC)/cronologia.cpp -I$(INCLUDE)
$(OBJ)/pruebacronologia.o : $(SRC)/pruebacronologia.cpp
$(CXX) $(CPPFLAGS) -o $(OBJ)/pruebacronologia.o $(SRC)/pruebacronologia.cpp -I$(INCLUDE)
Related
I get the following error :
make : *** no rule to make target obj/Divers.o, needed by main. Stop
Here is what my makefile look like :
IDIR = include
ODIR = obj
SDIR = src
BDIR = bin
CC = g++
CFLAGS = -g -Wall -Wextra -std=c11 -I$(IDIR)
PROG = main
_DEP = Divers.h ArbresSyntaxiques.h
DEP = $(patsubst %,$(IDIR)/%,$(_DEP))
_OBJ = Divers.o ArbresSyntaxiques.o Main.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
.PHONY: run all remake clean delete
all: $(PROG)
run : all
./$(PROG)
$(PROG) : $(OBJ)
$(CC) $(CFLAGS) -o $# $^ -lm
$(ODIR)/%.o : $(SDIR)/%.c $(DEP)
$(CC) $(CFLAGS) -c -o $# $<
clean :
rm -f $(ODIR)/*.o
delete : clean
rm $(PROG)
Finally my folder is structured like this :
include :
ArbresSyntaxiques.h
Divers.h
obj : (Empty)
src :
AbresSyntaxiques.cpp
Divers.o
Main.o
makefile
I'm in Ubuntu 16.04.3 LTS xenial and I'm trying to run the command make on the terminal, but I'm getting this error:
g++ -g -O2 -Wall -Wuninitialized -fno-strict-aliasing -Iinclude -
I/usr/local/include -DOS_LINUX -DHAVE_USB -DHAVE_LIBUSB10 -
DUSE_DRS_MUTEX -I/usr/lib/x86_64-linux-gnu/wx/include/gtk3-unicode-
3.1-unofficial3 -I/usr/include/wx-3.1-unofficial -
D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread -c src/DRS.cpp
In file included from /usr/include/c++/5/type_traits:35:0,
from /usr/include/wx-3.1-unofficial/wx/strvararg.h:22,
from /usr/include/wx-3.1-unofficial/wx/string.h:37,
from /usr/include/wx-3.1-unofficial/wx/memory.h:15,
from /usr/include/wx-3.1-unofficial/wx/object.h:19,
from /usr/include/wx-3.1-unofficial/wx/wx.h:15,
from src/DRS.cpp:15:
/usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file
requires compiler and library support for the ISO C++ 2011 standard.
This support must be enabled with the -std=c++11 or -std=gnu++11 c
ompiler options.
#error This file requires compiler and library support \
^
In file included from /usr/include/wx-3.1-unofficial/wx/string.h:37:0,
from /usr/include/wx-3.1-unofficial/wx/memory.h:15,
from /usr/include/wx-3.1-unofficial/wx/object.h:19,
from /usr/include/wx-3.1-unofficial/wx/wx.h:15,
from src/DRS.cpp:15:
/usr/include/wx-3.1-unofficial/wx/strvararg.h:345:18: error: ‘is_enum’
in namespace ‘std’ does not name a template type
typedef std::is_enum<T> is_enum;
^
/usr/include/wx-3.1-unofficial/wx/strvararg.h:349:54: error: ‘is_enum’
was not declared in this scope
enum { value =
wxFormatStringSpecifierNonPodType<is_enum::value>::value };
^
/usr/include/wx-3.1-unofficial/wx/strvararg.h:349:68: error: template
argument 1 is invalid
enum { value =
wxFormatStringSpecifierNonPodType<is_enum::value>::value };
^
src/DRS.cpp: In member function ‘void DRSBoard::InteractSpeed()’:
src/DRS.cpp:3986:25: warning: ignoring return value of ‘int
scanf(const char*, ...)’, declared with attribute warn_unused_result
[-Wunused-result]
scanf("%lf", &vds);
^
Makefile:81: recipe for target 'DRS.o' failed
make: *** [DRS.o] Error 1
I think that I must do this correction:
This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
I have never tried to do something like this before, so I don't know how to correct.
Follows the makefile:
# check if wxWidgets is installed
HAVE_WX = $(shell which wx-config)
ifeq ($(HAVE_WX),)
$(error Error: wxWidgets required to compile "drsosc")
endif
# check for OS
OS = $(shell uname)
ifeq ($(OS),Darwin)
DOS = OS_DARWIN
else
DOS = OS_LINUX
endif
CFLAGS = -g -O2 -Wall -Wuninitialized -fno-strict-aliasing -
Iinclude -I/usr/local/include -D$(DOS) -DHAVE_USB -DHAVE_LIBUSB10 -
DUSE_DRS_MUTEX
LIBS = -lpthread -lutil -lusb-1.0
ifeq ($(OS),Darwin)
CFLAGS += -stdlib=libstdc++
endif
# wxWidgets libs and flags
WXLIBS = $(shell wx-config --libs)
WXFLAGS = $(shell wx-config --cxxflags)
CPP_OBJ = DRS.o averager.o ConfigDialog.o DOFrame.o DOScreen.o
DRSOsc.o MeasureDialog.o Measurement.o Osci.o InfoDialog.o
DisplayDialog.o AboutDialog.o EPThread.o TriggerDialog.o rb.o
OBJECTS = musbstd.o mxml.o strlcpy.o
ifeq ($(OS),Darwin)
all: drsosc drscl drs_exam drs_exam_multi DRSOsc.app
else
all: drsosc drscl drs_exam drs_exam_multi
endif
DRSOsc.app: drsosc
-mkdir DRSOsc.app
-mkdir DRSOsc.app/Contents
-mkdir DRSOsc.app/Contents/MacOS
-mkdir DRSOsc.app/Contents/Resources
-mkdir DRSOsc.app/Contents/Resources/English.lproj
echo 'APPL????' > DRSOsc.app/Contents/PkgInfo
cp Info.plist DRSOsc.app/Contents/Info.plist
cp DRSOsc.icns DRSOsc.app/Contents/Resources
cp drsosc DRSOsc.app/Contents/MacOS/DRSOsc
drsosc: $(OBJECTS) $(CPP_OBJ) main.o
$(CXX) $(CFLAGS) $(OBJECTS) $(CPP_OBJ) main.o -o drsosc $(LIBS)
$(WXLIBS)
drscl: $(OBJECTS) DRS.o averager.o drscl.o
$(CXX) $(CFLAGS) $(OBJECTS) DRS.o averager.o drscl.o -o drscl
$(LIBS) $(WXLIBS)
drs_exam: $(OBJECTS) DRS.o averager.o drs_exam.o
$(CXX) $(CFLAGS) $(OBJECTS) DRS.o averager.o drs_exam.o -o drs_exam
$(LIBS) $(WXLIBS)
drs_exam_multi: $(OBJECTS) DRS.o averager.o drs_exam_multi.o
$(CXX) $(CFLAGS) $(OBJECTS) DRS.o averager.o drs_exam_multi.o -o
drs_exam_multi $(LIBS) $(WXLIBS)
main.o: src/main.cpp include/mxml.h include/DRS.h
$(CXX) $(CFLAGS) $(WXFLAGS) -c $<
drscl.o: src/drscl.cpp include/mxml.h include/DRS.h
$(CXX) $(CFLAGS) -c $<
drs_exam.o: src/drs_exam.cpp include/mxml.h include/DRS.h
$(CXX) $(CFLAGS) -c $<
drs_exam_multi.o: src/drs_exam_multi.cpp include/mxml.h include/DRS.h
$(CXX) $(CFLAGS) -c $<
$(CPP_OBJ): %.o: src/%.cpp include/%.h include/mxml.h include/DRS.h
$(CXX) $(CFLAGS) $(WXFLAGS) -c $<
$(OBJECTS): %.o: src/%.c include/mxml.h include/DRS.h
$(CC) $(CFLAGS) -c $<
clean:
rm -f *.o drscl drsosc
In my research I didn't find anything helpful.
Sorry for the long post, couldn't make it more simple.
You simply need to set the C++ standard by adding it to the CFLAGS, ie:
CFLAGS += -std=c++11
I have the same problem you have and I was looking for an answer but can't find one so I solved it on my own. In my case, the problem is with the string.h header file I removed it and my code is working now.
I am working on IMX7(Phytec zeta board) with yocto linux. On already working helloworld recipe(named as imx7-2110) I added some application source files(C, C++, h, hpp), created a make file and edited .bb files accordingly. on compilation I am getting error that one of the .hpp file(PktDriverAbstractionLayer.hpp) is not found, although it present in source directory and corresponding path is given to .bb file.
What could be the reason? I tried some suggestion available on internet forums but it didn't help.
Details of error are here:
[root#localhost build]# bitbake imx7-2110
Loading cache: 100% |###########################################| ETA:
00:00:00
Loaded 2800 entries from dependency cache.
Parsing recipes: 100% |#########################################| Time:
00:00:00
Parsing of 2223 .bb files complete (2222 cached, 1 parsed). 2799 targets,
220 skipped, 5 masked, 0 errors.
WARNING: No bb files matched BBFILE_PATTERN_phytec '^/opt/PHYTEC_BSPs
/yocto_imx7/sources/meta-phytec/common/'
NOTE: Resolving any missing task queue dependencies
Build Configuration:
BB_VERSION = "1.30.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "CentOSLinux-7.4.1708"
TARGET_SYS = "arm-poky-linux-gnueabi"
MACHINE = "imx7d-phyboard-zeta-001"
DISTRO = "fsl-imx-x11"
DISTRO_VERSION = "4.1.15-2.0.1"
TUNE_FEATURES = "arm armv7ve vfp neon callconvention-hard
cortexa7"
TARGET_FPU = "hard"
meta
meta-yocto = "HEAD:f5da2a5913319ad6ac2141438ba1aa17576326ab"
meta-oe
meta-multimedia = "HEAD:247b1267bbe95719cd4877d2d3cfbaf2a2f4865a"
meta-fsl-arm = "HEAD:be78894e4682f111575470fb23e51e6ba523508d"
meta-fsl-arm-extra = "HEAD:3dfb82fc7e703eae9891b3ffda0e9393701f2396"
meta-fsl-demos = "HEAD:a165068f8a0d1cf29aabe4b4053f28be1c2aa492"
meta-bsp
meta-sdk = "HEAD:90399d99af8a2660ebe50b49752e95b210239fd9"
meta-browser = "HEAD:77736988073a5d90fcff9d0005c8477332ede387"
meta-gnome
meta-networking
meta-python
meta-filesystems = "HEAD:247b1267bbe95719cd4877d2d3cfbaf2a2f4865a"
meta-qt5 = "HEAD:ccae79be69c5268df3b47e4e14cea0591c39a531"
meta-phytec
meta-phytec-fsl = "HEAD:0b1de01225a2ec0debf71eb13be403baa9f4919f"
meta-imx7-2110 = "<unknown>:<unknown>"
NOTE: Preparing RunQueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
ERROR: imx7-2110-0.1-r0 do_compile: Function failed: do_compile (log file
is located at /opt/PHYTEC_BSPs/yocto_imx7/build/tmp/work/cortexa7hf-
neon-poky-linux-gnueabi/imx7-2110/0.1-r0/temp/log.do_compile.7235)
ERROR: Logfile of failure stored in: /opt/PHYTEC_BSPs/yocto_imx7/build
/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/imx7-2110/0.1-r0
/temp/log.do_compile.7235
Log data follows:
| DEBUG: Executing shell function do_compile
| arm-poky-linux-gnueabi-g++ -march=armv7ve -mfpu=neon -mfloat-abi=hard
-mcpu=cortex-a7 --sysroot=/opt/PHYTEC_BSPs/yocto_imx7/build/tmp/sysroots
/imx7d-phyboard-zeta-001 -c -pthread -std=c++11 -O2 -pipe -g
-feliminate-unused-debug-types -fdebug-prefix-map=/opt/PHYTEC_BSPs
/yocto_imx7/build/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/imx7-2110
/0.1-r0=/usr/src/debug/imx7-2110/0.1-r0 -fdebug-prefix-map=/opt
/PHYTEC_BSPs/yocto_imx7/build/tmp/sysroots/x86_64-linux= -fdebug-prefix-
map=/opt/PHYTEC_BSPs/yocto_imx7/build/tmp/sysroots/imx7d-phyboard-
zeta-001= -fvisibility-inlines-hidden -g -c -Wall -Wextra -pthread
-std=c++0x pcieman_client.cpp -o pcieman_client.o
| In file included from pcieman_client.cpp:45:0:
| PktDriverUDPManager.hpp:18:41: fatal error:
PktDriverAbstractionLayer.hpp: No such file or directory
| compilation terminated.
| make: *** [pcieman_client.o] Error 1
| WARNING: /opt/PHYTEC_BSPs/yocto_imx7/build/tmp/work/cortexa7hf-
neon-poky-linux-gnueabi/imx7-2110/0.1-r0/temp/run.do_compile.7235:1 exit 2
from 'make'
| ERROR: Function failed: do_compile (log file is located at
/opt/PHYTEC_BSPs/yocto_imx7/build/tmp/work/cortexa7hf-neon-poky-linux-
gnueabi/imx7-2110/0.1-r0/temp/log.do_compile.7235)
ERROR: Task 6 (/opt/PHYTEC_BSPs/yocto_imx7/sources/meta-imx7-2110/recipes-
example/example/imx7-2110_0.1.bb, do_compile) failed with exit code '1'
NOTE: Tasks Summary: Attempted 351 tasks of which 346 didn't need to be
rerun and 1 failed.
No currently running tasks (351 of 358)
Summary: 1 task failed:
/opt/PHYTEC_BSPs/yocto_imx7/sources/meta-imx7-2110/recipes-example
/example/imx7-2110_0.1.bb, do_compile
Summary: There was 1 WARNING message shown.
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
[root#localhost build]#
Update with recipe:
#
# This file was derived from the 'Hello World!' example recipe in the
# Yocto Project Development Manual.
#
SUMMARY = "Simple helloworld application"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}
/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://build/build.tar.gz \
file://src/src.tar.gz \
file://include/include.tar.gz \
file://xpcie.h \
"
S = "${WORKDIR}"
#EXTRA_OEMAKE += "CPPFLAGS='-c -pthread -std=c++11'"
#EXTRA_OEMAKE += "CXXFLAGS='-g -c -Wall -Wextra -pthread -std=c++0x'"
do_compile() {
make
}
do_install() {
install -d ${D}${bindir}
install -m 0755 pcieman_client ${D}${bindir}
}
Here is also make with supplementary Info:
# Define Compiler to use
CC=g++
# Define default compiler options
# Flags passed to the preprocessor.
CPPFLAGS=-c -pthread -std=c++11
CXXFLAGS += -g -c -Wall -Wextra -pthread -std=c++0x
LFLAGS=-Bsymbolic
all: pcieman_client
pcieman_client: pcieman_client.o parser.o udp_socket_class.o
ds_api_class.o syn1588_class.o tr03_class.o pio_class.o search_api_class.o
packet_proc_class.o socket_tools.o crc_calc.o stdafx.o transaction_class.o
lpq_api_class.o fileIn_class.o vip_Rx_udp.o vip_Tx_udp.o
PktDriverAbstractionLayer.o PktDriverUDPManager.o StateMachine.o
MessageEvent.o appl_menu.o
$(CC) $(LFLAGS) -lpthread pcieman_client.o parser.o udp_socket_class.o
ds_api_class.o syn1588_class.o tr03_class.o pio_class.o search_api_class.o
packet_proc_class.o socket_tools.o crc_calc.o stdafx.o transaction_class.o
lpq_api_class.o fileIn_class.o vip_Rx_udp.o vip_Tx_udp.o
PktDriverAbstractionLayer.o PktDriverUDPManager.o StateMachine.o
appl_menu.o MessageEvent.o -o pcieman_client
pcieman_client.o: version.h udp_socket_class.h socket_tools.h
packet_proc_class.h transaction_class.h parser_params.h parser.h
pcieman_client.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) pcieman_client.cpp -o pcieman_client.o
udp_socket_class.o: udp_socket_class.h udp_socket_class.cpp
$(CC) $(CPPFLAGS) udp_socket_class.cpp -o udp_socket_class.o
appl_menu.o: appl_menu.hpp appl_menu.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) appl_menu.cpp -o appl_menu.o
ds_api_class.o: ds_api_class.h ds_api_class.cpp
$(CC) $(CPPFLAGS) ds_api_class.cpp -o ds_api_class.o
search_api_class.o: crc_calc.h search_api_class.h search_api_class.cpp
$(CC) $(CPPFLAGS) search_api_class.cpp -o search_api_class.o
pio_class.o: crc_calc.h pio_class.h pio_class.cpp
$(CC) $(CPPFLAGS) pio_class.cpp -o pio_class.o
syn1588_class.o: RxTx_settings.h syn1588_class.h syn1588_class.cpp
$(CC) $(CPPFLAGS) syn1588_class.cpp -o syn1588_class.o
tr03_class.o: RxTx_settings.h tr03_class.h tr03_class.cpp
$(CC) $(CPPFLAGS) tr03_class.cpp -o tr03_class.o
packet_proc_class.o: packet_proc_class.h packet_proc_class.cpp
$(CC) $(CPPFLAGS) packet_proc_class.cpp -o packet_proc_class.o
socket_tools.o: socket_tools.h socket_tools.cpp
$(CC) $(CPPFLAGS) socket_tools.cpp -o socket_tools.o
crc_calc.o: crc_calc.h crc_calc.cpp
$(CC) $(CPPFLAGS) crc_calc.cpp -o crc_calc.o
stdafx.o: stdafx.h stdafx.cpp
$(CC) $(CPPFLAGS) stdafx.cpp -o stdafx.o
transaction_class.o: packet_proc_class.h transaction_class.h
transaction_class.cpp
$(CC) $(CPPFLAGS) transaction_class.cpp -o transaction_class.o
lpq_api_class.o: lpq_api_class.h lpq_api_class.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) lpq_api_class.cpp -o lpq_api_class.o
fileIn_class.o: fileIn_class.h fileIn_class.cpp
$(CC) $(CPPFLAGS) fileIn_class.cpp -o fileIn_class.o
vip_Rx_udp.o: vip_Rx_settings.h RxTx_settings.h ds_api_class.h
syn1588_class.h tr03_class.h pio_class.h lpq_api_class.h
search_api_class.h PktDriverUDPManager.hpp vip_Rx_udp.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) vip_Rx_udp.cpp -o vip_Rx_udp.o
vip_Tx_udp.o: vip_Tx_settings.h RxTx_settings.h PktDriverUDPManager.hpp
vip_Tx_udp.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS)vip_Tx_udp.cpp -o vip_Tx_udp.o
parser.o: parser_params.h parser.h parser.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) parser.cpp -o parser.o
IGMPTimerManager.o: IGMPTimerManager.hpp IGMPTimerManager.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPTimerManager.cpp -o IGMPTimerManager.o
IGMPManager.o: IGMPManager.hpp IGMPManager.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPManager.cpp -o IGMPManager.o
IGMPNetworkManager.o: IGMPNetworkManager.hpp IGMPNetworkManager.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPNetworkManager.cpp -o
IGMPNetworkManager.o
IGMPHostEvent.o: IGMPHostEvent.hpp IGMPHostEvent.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPHostEvent.cpp -o IGMPHostEvent.o
IGMPMulticastHost.o: IGMPMulticastHost.hpp IGMPStateMachine.hpp
IGMPMulticastHost.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPMulticastHost.cpp -o
IGMPMulticastHost.o
StateMachine.o: StateMachine.hpp StateMachine.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) StateMachine.cpp -o StateMachine.o
MessageEvent.o: MessageEvent.hpp MessageEvent.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) MessageEvent.cpp -o MessageEvent.o
IGMPV2StateMachine.o: IGMPStateMachine.hpp IGMPV2StateMachine.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPV2StateMachine.cpp -o
IGMPV2StateMachine.o
IGMPV3StateMachine.o: IGMPStateMachine.hpp IGMPV3StateMachine.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPV3StateMachine.cpp -o
IGMPV3StateMachine.o
IGMPStateMachine.o: IGMPStateMachine.hpp IGMPStateMachine.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) IGMPStateMachine.cpp -o IGMPStateMachine.o
PktDriverAbstractionLayer.o: PktDriverAbstractionLayer.hpp
PktDriverAbstractionLayer.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) PktDriverAbstractionLayer.cpp -o
PktDriverAbstractionLayer.o
PktDriverUDPManager.o: PktDriverUDPManager.hpp PktDriverUDPManager.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) PktDriverUDPManager.cpp -o
PktDriverUDPManager.o
clean:
rm -rf *.o pcieman_client
configuration file local.conf is here:
MACHINE ??= 'imx7d-phyboard-zeta-001'
DISTRO ?= 'fsl-imx-x11'
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES = "debug-tweaks"
IMAGE_INSTALL_append=" xyzlayer"
IMAGE_INSTALL +="boost"
USER_CLASSES ?= "buildstats image-mklibs phytec-mirrors"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS = "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K \
ABORT,/tmp,10M,1K"
PACKAGECONFIG_append_pn-qemu-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
ASSUME_PROVIDED += "libsdl-native"
CONF_VERSION = "1"
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 4"
DL_DIR ?= "/opt/PHYTEC_BSPs/yocto_dl"
ACCEPT_FSL_EULA = "1"
bblayer file bblayers.conf is here:
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BSPDIR := "${#os.path.abspath(os.path.dirname(d.getVar('FILE', True)) +
'/../..')}"
BBFILES ?= ""
BBLAYERS = " \
${BSPDIR}/sources/poky/meta \
${BSPDIR}/sources/poky/meta-poky \
\
${BSPDIR}/sources/meta-openembedded/meta-oe \
${BSPDIR}/sources/meta-openembedded/meta-multimedia \
\
${BSPDIR}/sources/meta-fsl-arm \
${BSPDIR}/sources/meta-fsl-arm-extra \
${BSPDIR}/sources/meta-fsl-demos \
${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-bsp \
${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-sdk \
\
${BSPDIR}/sources/meta-browser \
${BSPDIR}/sources/meta-openembedded/meta-gnome \
${BSPDIR}/sources/meta-openembedded/meta-networking \
${BSPDIR}/sources/meta-openembedded/meta-python \
${BSPDIR}/sources/meta-openembedded/meta-filesystems \
${BSPDIR}/sources/meta-qt5 \
\
${BSPDIR}/sources/meta-phytec \
${BSPDIR}/sources/meta-phytec/meta-phytec-fsl \
${BSPDIR}/sources/meta-xyzlayer \
${BSPDIR}/sources/meta-testlayer \
"
What I see missing in the arm-poky-linux-gnueabi-g++ command line is the "-I" option for include path. Since the bitbake environment variables override the Makefile variables, it maybe required to explicitly specify the include paths using the following (in your recipe file before the do_compile() task):
TARGET_CFLAGS += " -I${S}"
Assuming that the header files are in the same folder as the source files.
1. My file structure is:
build/
include/
-Sort.h
src/
-Sort.cpp
-main.cpp
2. My Makefile:
C++ = g++
SRCPATH := ./src
BUILDPATH := ./build
SORTINCPATH := ./include
TARGET := $(BUILDPATH)/sort
CPPFLAGS := -c -g -Wall -O0
INCPATH := -I./ -I$(SORTINCPATH)
CPPFILES += $(wildcard $(SRCPATH)/*.cpp)
CFILES += $(wildcard $(SRCPATH)/*.c)
HEADFILES += $(wildcard $(SORTINCPATH)/*.h)
CPPOBJS += $(CPPFILES:.cpp=.o)
COBJS += $(CFILES:.c=.o)
.PHONY : all
all: $(TARGET)
$(TARGET): $(CPPOBJS) $(COBJS)
$(C++) $(CPPFLAGS) -o $# $(CPPOBJS) $(COBJS)
%.o : %.c $(HEADFILES)
$(C++) $(CPPFLAGS) $(INCPATH) $< -o $#
%.O : %.cpp $(HEADFILES)
$(C++) $(CPPFLAGS) $(INCPATH) $< -o $#
.PHONY : clean
clean:
-rm $(TARGET) $(COBJS) $(CPPOBJS)
3. Sort.h
sort.h
4. Sort.cpp
sort-1.cpp
sort-2.cpp
5. When I run make, it shows the following:
g++ -c -g -Wall -O0 -c -o src/Sort.o src/Sort.cpp
and says "src/Sort.cpp:3:18: fatal error: Sort.h: no such file or directory".
I hope you can help me find out where the problem is.
Thank you so much!
How do I use different compiler flags for different source files in a Makefile? For example, I'd like a Makefile that will produce:
g++ -c -COMPILER_FLAGS_1 -g source1.cpp -o source1.o
g++ -c -COMPILER_FLAGS_2 -g source2.cpp -o source2.o
g++ -c -COMPILER_FLAGS_2 -g source3.cpp -o source3.o
g++ -c -COMPILER_FLAGS_2 -g source4.cpp -o source4.o
g++ -c -COMPILER_FLAGS_3 -g source5.cpp -o source5.o
g++ -c -COMPILER_FLAGS_3 -g source6.cpp -o source6.o
g++ -c -COMPILER_FLAGS_3 -g source7.cpp -o source7.o
g++ -g -o output source1.o source2.o source3.o source4.o source5.o source6.o source7.o
At the moment I've got about 20 source files (and that's expected to grow), so an easy to maintain file would be nice.
Thanks in advance.
You could do something like the following (untested, so the syntax might be slightly off):
OBJS_1 := source1.o
OBJS_2 := source2.o source3.o source4.o
OBJS_3 := source5.o source6.o source7.o
OBJS := $(OBJS_1) $(OBJS_2) $(OBJS_3)
output: $(OBJS)
$(CXX) -g -o $# $^
$(OBJS_1): CXXFLAGS := $(COMPILER_FLAGS_1)
$(OBJS_2): CXXFLAGS := $(COMPILER_FLAGS_2)
$(OBJS_3): CXXFLAGS := $(COMPILER_FLAGS_3)
$(OBJS): %.o: %.cpp
$(CXX) -c $(CXXFLAGS) -g $< -o $#
Here is UNIX/LINUX makefile which I wrote and tested on Solaris LINUX to handle different compilation flags for different sections of a GNUmakefile. Please let me know if it can be improved. Thank you
# GNUmakefile
#
# makefile for mdRightFielder
#
# Builds:
# libmdRightFielder.so or libmdRightFielder.sl
ifndef SUB
include ../header.mk
else
VPATH=../Source:../Source/PCRE:../Source/SQLite:../../cpswindows/Source:../../util/mdLicense
INCL=-I../Include -I../Include/PCRE -I../Include/SQLite -I../../cpswindows/Include -I ../../util -I../../util/mdLicense
APIOBJ=cGlobalDataDestructor.o cPCRE.o CppInterface.o cRightFielder-FillTokenGaps.o
PCREOBJ=pcre_chartables.o pcre_compile.o pcre_exec.o pcre_fullinfo.o pcre_get.o pcre_globals.o pcre_newline.o \
pcre_tables.o pcre_try_flipped.o
SQLITEOBJ=sqlite3.o
CPSWINDOWSOBJ=BinarySearch.o cConfigFile.o cCriticalSection.o cDateTime.o cException.o cFile.o cSQLite.o \
QuickSort.o StringFunctions.o
MDLICENSEOBJ=CBigNum.o mdLicense.o RSA.o
ifeq ($(CPU),sparc)
ifdef workshop
CALIGN=-xmemalign=1s
ifdef release
CXXALIGN=-Qoption cg -xmemalign=1s
else
CXXALIGN=-Qoption ccfe -y-xmemalign=1s
endif
endif
endif
COMPILER_FLAGS_1=-D_NO_GUI
COMPILER_FLAGS_2=-D_NO_GUI -DHAVE_CONFIG_H
CXXFLAGS+=-DPCRE_STATIC -DUSE_STATIC
CFLAGS+=-D_NO_GUI -DHAVE_CONFIG_H -DPCRE_STATIC -DUSE_STATIC
DEPFLAGS+=-DLINK_SIZE=2 -D_NO_GUI -DHAVE_CONFIG_H -DPCRE_STATIC -DUSE_STATIC
.PHONY: all clean
all: libmdRightFielder.so
cp -fp ../Include/mdRightFielder.h ../../util/mdEnums.h libmdRightFielder.so $(SHIP)
if [ `uname` = HP-UX ] ; \
then \
/bin/mv -f $(SHIP)/libmdRightFielder.so $(SHIP)/libmdRightFielder.sl ; \
fi
clean:
rm -f *.o *.so *.sl deps
rm -f core core.[0-9]*
$(APIOBJ): CXXFLAGS+=$(COMPILER_FLAGS_1)
$(PCREOBJ): CXXFLAGS+=$(COMPILER_FLAGS_2)
MARYOBJS = $(APIOBJ) $(PCREOBJ)
libmdRightFielder.so: \
$(MARYOBJS)
-$(CXX) $(CXXFLAGS) $(INCL) $(SHARED) $^ -o $# $(LDLIBS)
mary:
%.o : %.cpp # cancel implicit CPP compilation rule
%.o : %.cpp
$(CXX) $(CXXFLAGS) $(INCL) $(PIC) $< -o $# -c
%.o : %.c # cancel implicit C compilation rule
%.o : %.c
$(CC) $(CFLAGS) $(INCL) $(PIC) $< -o $# -c
endif