CMake 不链接 cpp 文件

问题描述 投票:0回答:0

我正在使用 CMake 编译静态库。我有“轨道”课程。

在 .h 文件中是这样声明的:

class Track {
private:
    static int _id_counter;
    int _id;
    TrackInfo _info;
public:

    Track();

    Track(TrackInfo &info);

    Track(const Track &t) = default;

};

和.cpp:

#include "Track.h"

int Track::_id_counter = 0;

Track::Track() : _info(), _id(++_id_counter) {}

Track::Track(TrackInfo &info) : _info(info), _id(++_id_counter) {}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.23)

set(project "database")
project(${project})

set(CMAKE_CXX_STANDARD 17)

set(${project}_SOURCES Track.cpp)

set(${project}_HEADERS Track.h)

set(${project}_SOURCE_LIST
        ${${project}_SOURCES}
        ${${project}_HEADERS})

add_library(${project}
        STATIC
        ${${project}_SOURCE_LIST})

问题是CMake只使用头文件编译静态库,没有cpp。所以,当我使用这个库时,我有错误:

undefined reference to 
Track::Track(TrackInfo&)'`

如果我在标头中实现构造函数,我会得到对 _id_counter 的未定义引用

例如:

#include "Track.h"

...

TrackInfo info;
Track track(info);

...

我尝试包含 Track.cpp 并且它以这种方式工作正常。但我认为这不是一个好方法 =)

cmake reference linker undefined
© www.soinside.com 2019 - 2024. All rights reserved.