文件结构
Base|
Foo |
| Foo.hpp & Foo.cpp
Bar |
| Bar.hpp & Bar.cpp
main.cpp & CMakeLists.txt
Bar.hpp
template <typename Ty>
class Bar {
public:
float Value() const;
};
Bar.cpp
#include "Bar.hpp"
template<typename Ty>
float Bar<Ty>::Value() const {
return 1234.0;
}
Foo.hpp
#include "../Bar/Bar.hpp"
class Foo : public Bar<int> {
public:
float Get() const;
};
Foo.cpp
#include "Foo.hpp"
float Foo::Get() const {
return Value();
}
CMakeLists.txt的主要部分
add_library(Bar_lib Bar/Bar.cpp Bar/Bar.hpp)
add_library(Foo_lib Foo/Foo.cpp Foo/Foo.hpp)
target_link_libraries(Foo_lib Bar_lib)
add_executable(testing main.cpp)
target_link_libraries(testing Foo_lib)
main.cpp文件仅调用foo.Get(),当我运行cmake&make时会给出
/usr/bin/ld: libFoo_lib.a(Foo.cpp.o): in function `Foo::Get() const':
Foo/Foo.cpp: undefined reference to `Bar<int>::Value() const'
但是当我将所有内容放入main.cpp文件中时,它将成功编译。因此,我知道它与make有关。我的问题是如何修改CMakeLists.txt甚至cpp文件以使此文件运行?我是cmake的菜鸟,所以如果我问一个愚蠢的问题,对不起。非常感谢每个建议