Я пытаюсь скомпилировать тестовый файл C ++, который должен компилироваться из файлов, которые находятся в соседних папках в структуре файла проекта. У меня есть следующее:
Project/TestFiles/makefile
Project/TestFiles/test.cpp
Project/OtherFiles/my_stuff.cpp
Project/OtherFiles/my_stuff.hpp
Для компиляции я пытаюсь оставить файл my_stuff.o
в папке OtherFiles
, поэтому, если у меня есть другие makefiles
, им не придется перекомпилировать каждая отдельная версия.
Мой makefile
выглядит следующим образом:
CC = g++
CFLAGS = -std=c++11 -Wall -Wcomment -Werror -Wextra -Weffc++ -pedantic
run: test.out
test.out: test.cpp catchMain.cpp ../OtherFiles/my_stuff.o
$(CC) $(CFLAGS) $^ -o $@
my_stuff.o: ../OtherFiles/my_stuff.cpp ../OtherFiles/my_stuff.hpp
$(CC) $(CFLAGS) -c $<
Некоторое время я думал, что эта установка работает, но потом у меня начались странные проблемы, и я не смог скомпилировать , Например, имея static const map
произведенный error: expected ';' after top level declarator
. Поначалу Inte rnet, казалось, указывало на то, что компиляторы Ma c иногда не могут компилировать static const map
s со списками инициализации членов (на что он также жаловался, если я удалил часть static const
). Однако, когда я закомментировал все, что связано с std::map
(оставив makefile
как описано выше) ИЛИ поместил все файлы в одну папку (переписав и makefile
, и #include
s в test.cpp
) все в порядке, но я бы хотел использовать std::map
s И выбранную файловую структуру. Да, и удаление лишних флажков предупреждения тоже не работает.
Есть идеи, как мне это сделать?
Редактировать
my_stuff.hpp
:
namespace my_stuff {
void function();
}
my_stuff.cpp
:
#include "my_stuff.hpp"
#include <map>
namespace my_stuff {
static const std::map<char, char> the_map {{'a', 'b'}, {'c', 'd'}};
void my_function() {
// map stuff
}
}
Испытательная часть представляет собой как ваниль catchMain.cpp
:
#define CATCH_CONFIG_MAIN
#include "../../Catch2/catch.hpp" //which is outside the project specifics
, так и фактические испытания, my_tests.cpp
:
#include "../../Catch2/catch.hpp"
#include "../OtherFiles/my_stuff.hpp"
#include <map>
SCENARIO("", "") {
GIVEN("") {
WHEN("") {
THEN("") {
my_function();
// Other stuff
}
}
}
}