Группы я сделал на всякий случай. Без групп так же
typedef double (*func_t)(double x);
func_t func;
int (*arr)[10];
double (*func[10])(double x);
с разрядностью не ошиблись?
find_package(PkgConfig REQUIRED)
для включения поиска библиотек с помощью pkg_config и использовать pkg_check_modules для поиска библиотек. man pkg_config
можно посмотреть для справки. add_library(... static imported ...)
А в верхней части черепа такое ощущение, будто мозг сочится
cmake_minimum_required(VERSION 3.2)
project(2DPrimitive)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 1)
redirect-gateway def1 ipv6 bypass-dhcp
pull-filter ignore redirect-gateway
походу придется
Вообще порядок следования важен не только для библиотек, а для всех объектных файлов, которые участвуют в компоновке, в т.ч. и для ваших объектных файлов. Это становится важным, когда в проекте куча объектников. Но устройство своих исходников вы знаете и моежете их выстроить в правильном порядке. А с библиотеками может быть немного труднее.
Компоновщик, так же как и компилятор однопроходный. Читает очередную опцию командной строки, строит на ее основе список символов, пытается разрешить предыдущие undefined reference текущими символами, переходит к следующей опции.
Таким образом, если на очередном объектном файле есть undefined reference они все должны закрыться с помощью объектных файлов, указанных после этого объектника.