Ошибка неопределённая ссылка при сборке проекта C++, CMake

Я понимаю что это связано с линковкой но не пойму почему этод код не работает.

Есть следующая структура проекта:

 1. include
    - command.h
    - start_command.h
 2. src
    - command.cpp
    - main.cpp
    - start_command.cpp
 3. CMakeLists.txt

В command.h

#ifndef BOTM8_COMMAND_H
#define BOTM8_COMMAND_H

#include<memory>
#include<string>

class Command
{
public:
    template<typename CommandType>
    static std::shared_ptr<CommandType> create();

    void pri(std::string st);
};

#endif

В start_command.h

#ifndef BOTM8_STARTCOMMAND_H
#define BOTM8_STARTCOMMAND_H

#include"command.h"

class StartCommand : public Command
{
public:
    
};

#endif

В command.h

#include"command.h"

#include<iostream>

template<typename CommandType>
std::shared_ptr<CommandType> Command::create()
{
    return std::make_shared<CommandType>();
}

void Command::pri(std::string st)
{
    std::cout<<st<<std::endl;
}

В main.cpp

#include"start_command.h"

int main()
{
    auto startCommand = Command::create<StartCommand>();

    startCommand->pri("Hi!");
    return 0;
}

В start_command.cpp

#include"start_command.h"

В CMakeLists.txt

cmake_minimum_required(VERSION 3.28)

project(test
    VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_BUILD}
    DESCRIPTION PROJECT_DESCRIPTION
    LANGUAGES CXX
)


enable_language(CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(sources 
    src/command.cpp
    src/start_command.cpp
    src/main.cpp
)
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${sources})

add_executable(test)
target_sources(test PRIVATE ${sources})

target_include_directories(
    test ${warning_guard}
    PUBLIC
        "\$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
)

Выполняю cmake .. после make и выдаёт ошибку

[25%] Building CXX object CMakeFiles/test.dir/src/command.cpp.o
[50%] Building CXX object CMakeFiles/test.dir/src/start_command.cpp.o
[75%] Building CXX object CMakeFiles/test.dir/src/main.cpp.o [100%]
   Linking CXX executable test
   ***/usr/bin/ld: CMakeFiles/test.dir/src/main.cpp.o: в функции «main»: main.cpp:(.text+0x24): undefined reference to
   std::shared_ptr<StartCommand> Command::create<StartCommand>()'***
   collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/test.dir/build.make:129: test] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/test.dir/all] Ошибка 2
make: *** [Makefile:91: all] Ошибка 2

Ответы (0 шт):