我尝试了几种方法来解决这个问题,但我显然无法理解 CMake...
下面基本上就是整个项目:
.
├── CMakeLists.txt
└── src
├── CMakeLists.txt
├── main.cpp
├── SubwordEncoder.cpp
└── SubwordEncoder.h
第一个(./CMakeLists.txt
)包含:
cmake_minimum_required(VERSION 3.5)
project(xlib)
set(CMAKE_CXX_STANDARD 11)
add_subdirectory(./src)
add_executable(main src/main.cpp)
和第二个(src/MakeLists.txt
)
file(GLOB_RECURSE xlib_SOURCES "*.cpp")
file(GLOB_RECURSE xlib_SURCES "*.h")
main.cpp
只包含这个:
#include <string>
#include <iostream>
#include <stdio.h>
#include "SubwordEncoder.h"
int main() {
std::cout << "Hello World!" << std::endl;
auto encoder = new SubwordEncoder();
auto encoded = encoder->encode("Hello World!");
for (auto i : encoded) {
std::cout << i << std::endl;
}
return 0;
}
SubwordEncoder.h
#ifndef XLIB_SUBWORDENCODER_H
#define XLIB_SUBWORDENCODER_H
#include <string>
#include <vector>
class SubwordEncoder {
public:
std::vector<int> encode(std::string decoded);
};
#endif //XLIB_SUBWORDENCODER_H
和SubwordEncoder.cpp
#include "SubwordEncoder.h"
std::vector<int> SubwordEncoder::encode(std::string decoded) {
std::vector<int> vect;
vect.push_back(10);
vect.push_back(20);
vect.push_back(30);
return vect;
}
但我一直收到这个错误:
/tmp/tmp.KYl9HEcObN/src/main.cpp:13: undefined reference to `SubwordEncoder::encode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
我做错了什么?
备注:
我知道我可以做到:
add_executable(main src/main.cpp src/SubwordEncoder.cpp src/SubwordEncoder.h)
但我不想在这里添加每个文件。我希望 src/
中的所有文件都用于编译。
最佳答案
当你调用 add_executable()
时,你只包含 main.cpp
而不是其他的,所以 SubwordEncoder::encode
是未定义的当您尝试在 main()
中使用它时。尝试将您的 CMake 文件更改为如下内容:
./CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(xlib)
set(CMAKE_CXX_STANDARD 11)
add_subdirectory(src)
./src/CMakeLists.txt
file(GLOB_RECURSE xlib_SOURCES "*.cpp")
file(GLOB_RECURSE xlib_HEADERS "*.h")
add_executable(main ${xlib_SOURCES} ${xlib_HEADERS})
# Include the current folder for including headers.
target_include_directories(main PRIVATE ${CMAKE_CURRENT_LIST_DIR})
关于c++ - 获取 "undefined reference to",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57329102/