Я пытаюсь использовать Gradle (5.6.2) для создания базовой библиотеки C ++ и не могу понять, что здесь происходит не так. Я начал использовать Gradle init для создания базовой структуры ... вот мой build.gradle:
plugins {
// Apply the cpp-library plugin to add support for building C++ libraries
id 'cpp-library'
// Apply the cpp-unit-test plugin to add support for building and running C++ test executables
id 'cpp-unit-test'
}
// Set the target operating system and architecture for this library
library {
targetMachines.add(machines.macOS.x86_64)
dependencies {
implementation files('/usr/local/lib/libjsoncpp.a') // used by classA
}
}
tasks.withType(CppCompile).configureEach {
compilerArgs.add "-std=c++11"
compilerArgs.add "-w"
}
Исходное дерево выглядит так:
src/main/cpp -> classA.cpp classB.cpp classB.hpp hello.cpp
src/main/public -> classA.hpp cppd.h cpplib.h
src/test/cpp -> classATest.cpp hello_test.cpp
hello.cpp, cppd.h, cpplib.h и hello_test.cpp все взяты из 'gradle init' и фактически не используются.
classA вызывает несколько методов в classB. classB зависит только от стандартных библиотек.
classB имеет открытый метод classB :: method1 (), который вызывает два закрытых метода classB :: method2 () и classB :: method3 ()
Когда япостроить, я получаю ошибку компоновщика, что он не может найти classB :: method2 () или classB :: method3 (). Я проверил сигнатуры методов, и все они совпадают (одинаковое количество и тип аргументов в classB.hpp, classB.cpp и в сообщении об ошибке компоновщика).
Я просмотрел документацию Gradle и все погуглилЯ могу придумать, перепробовал несколько вариантов файла build.gradle и ... Я не понимаю, почему компоновщик не может найти методы в одном и том же файле CPP ??
Сборка с Clang 11.0 наMacOS 10.14.6 в случае, если это имеет значение ...
Также для справки, вот соответствующие биты заголовочного файла:
class classB {
public:
method1();
private:
string& method2(const string& s, bool b);
int method3(uint16_t* b, const string& s);
}
И методы из файла cpp:
string& method2(const string& s, bool b) {
// blah
}
int method3(uint16_t* b, const string& s) {
// blah
}