使用cmake在c ++

时间:2019-06-16 19:21:50

标签: c++ cmake

我是cpp的新手,我正在尝试使用cmake编写一个简单的项目。

目标:编写库并将其包含在其他项目中。 问题:我不断收到链接器错误,我不知道如何继续。

我已经在一个文件中编写了该类,并且一切正常,但是当我将代码拆分到库中时会出错

#include <iostream>
#include <algorithm>
#include <vector>
#include <initializer_list>

#include "op.hpp"

using std::cout;
using std::endl;
using std::sort;
using std::vector;

using Ops::Operation;
using sort::Sorter;

int main(int argc, char **argv)
{
    int arr[] = {2, 3, 4, 2, 3, -1, 0};
    int n = sizeof(arr) / sizeof(arr[0]);
    vector<int> vec(arr, arr + n);

    for (auto a : vec)
        cout << a << '\t';
    cout << endl;

    Sorter s;
    s.sort(vec);

    for (auto a : vec)
        cout << a << '\t';
    cout << endl;
}
#include <algorithm>
#include "op.hpp"
#include <stdio.h>

namespace Ops
{
int Operation::add(const int a, const int b)
{
    return a + b;
}

} // namespace Ops

namespace sort
{
Sorter::Sorter() {}

template <typename C>
void Sorter::sort(C &c)
{
    std::sort(c.begin(), c.end());
}
} // namespace sort
namespace Ops
{
class Operation
{
public:
    int add(const int, const int);
};
} // namespace Ops

namespace sort 
{
class Sorter
{
public:
    Sorter();
    template <class C>
    void sort(C &c);
};
} // namespace sorter
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
project(testing VERSION 1.0.0)

add_library(
    op SHARED
    op.hpp
    op.cpp
)
add_executable(main main.cpp)

target_link_libraries(main PRIVATE op)

我希望输出是打印的排序向量 我收到错误消息

Undefined symbols for architecture x86_64:
  "void sort::Sorter::sort<std::__1::vector<int, std::__1::allocator<int> > >(std::__1::vector<int, std::__1::allocator<int> >&)", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [main] Error 1
make[1]: *** [CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2

0 个答案:

没有答案