Я просмотрел несколько постов с одинаковыми вопросами здесь, и, насколько я понял, я сделал то, что они сказали сделать.Тем не менее, я все еще получаю предупреждение «неопределенная ссылка на cmb :: functionA ()».
У меня есть заголовок:
//combine.h
#ifndef COMBINE_H
#define COMBINE_H
namespace cmb
{
void functionA();
}
#endif
Исходный файл функции:
// combine.cc
#include <iostream>
#include "combine.h"
using namespace std;
namespace cmb
{
void functionA()
{
cout << "print something\n";
}
}
И основной:
//main.cc
#include "combine.h"
using namespace std;
using namespace cmd;
int main(int argc, char *argv[])
{
functionA();
}
Теперь он работает, когдаКомпиляция вручную (g ++ -o Test * .cc -Wall --std = c ++ 17), но использование make все равно выдает мне ту же ошибку.Я действительно не понимаю, создавать файлы, поэтому любая помощь будет оценена.
makefile:
CXX := g++
CXXFLAGS += -Wall -std=c++17
LIBSRCS = $(filter-out main.cc,$(shell find -name \*.cc))
LIBOBJS = $(patsubst %.cc,%.o,$(LIBSRCS))
main: main.o combine.o libproject.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $<
$(LIBOBJS): %.o: %.cc
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
libproject.a: $(LIBOBJS)
ar rcs $@ $^
clean:
rm -f libproject.a $(LIBOBJS)
.PHONY: clean
Я просто использую make main
в терминале.