Makefile在dll01里面,编译也是来这里编译。
Public.h
#ifndef __PUBLIC_H__
#define __PUBLIC_H__
#define PI 3.1415926
#endif // !__PUBLIC_H__
TestLib.h
测试包含上一层头文件,如包含Public.h: #include <dll01/Public.h>
#ifndef __TESTLIB_H__
#define __TESTLIB_H__
#include <dll01/Public.h>
class TestLib
{
public:
TestLib();
virtual ~TestLib();
public:
int TestSum(int a, int b);
};
#endif // ! __TESTLIB_H__
TestLib.cpp
#include "TestLib.h"
TestLib::TestLib() {
}
TestLib::~TestLib() {
}
int TestLib::TestSum(int a, int b) {
return a + b;
}
Makefile
TARGET := libMyMath.so
TARGET_PATH :=../
CC := g++
LIBS :=
LDFLAGS :=
DEFINES :=
INCLUDES := -I..
CFLAG := -g -Wall -O3 -std=c++11 $(DEFINES) $(INCLUDES)
CXXFLAGS:= $(CFLAGS)
VPATH = . ./subdir
SOURCE := $(wildcard *.cpp) $(wildcard subdir/*.cpp)
SRC_WITHOUTDIR:= $(notdir $(SOURCE))
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SRC_WITHOUTDIR)))
$(TARGET) : $(OBJS)
$(CC) -shared -o $@ $(OBJS) $(LDFLAGS) $(INCLUDES)
%.o : %.cpp
$(CC) $(CXXFLAGS) -fpic -c $< -o $@ $(LDFLAGS) $(LIBS)
.PHONY : clean
clean:
rm -f *.o
rm -f $(TARGET)
通过 INCLUDES := -I.. 让包含目录指向dll01的上一层
编译提示找不到Public.h
错误信息:
g++ -fpic -c ./subdir/TestLib.cpp -o TestLib.o
In file included from ./subdir/TestLib.cpp:1:0:
./subdir/TestLib.h:4:26: fatal error: dll01/Public.h: No such file or directory
compilation terminated.
Makefile:68: recipe for target 'TestLib.o' failed
make: *** [TestLib.o] Error 1
5 个解决方案
#1
CXXFLAGS:= $(CFLAGS)
#2
CXXFLAGS:= $(CFLAGS)改成
CXXFLAGS:= $(CFLAG)多了一个S
CXXFLAGS:= $(CFLAG)多了一个S
#3
没人来领分么
#4
CXXFLAGS:= $(CFLAGS)改成
CXXFLAGS:= $(CFLAG)多了一个S
CXXFLAGS:= $(CFLAG)多了一个S
#5
0.0.0.0.0..0.0.0.0.0.0.0.0.
#1
CXXFLAGS:= $(CFLAGS)
#2
CXXFLAGS:= $(CFLAGS)改成
CXXFLAGS:= $(CFLAG)多了一个S
CXXFLAGS:= $(CFLAG)多了一个S
#3
没人来领分么
#4
CXXFLAGS:= $(CFLAGS)改成
CXXFLAGS:= $(CFLAG)多了一个S
CXXFLAGS:= $(CFLAG)多了一个S
#5
0.0.0.0.0..0.0.0.0.0.0.0.0.