无法使用cmake编译简单的项目结构(使用catch2库)
Unable to compile simple project structure (uses catch2 library) with cmake
我的项目结构非常简单,无法使用 CMake 进行编译。我已经尝试阅读有关 CMake 的文档或教程,但无法正常工作。
有一个 ,但即使尝试了建议的答案我也无法让它工作。
你可以看到我的完整代码here
但是相关的CMakeLists是:
根级别:
cmake_minimum_required(VERSION 3.5)
find_package(Catch2 REQUIRED)
project(majorityQueries LANGUAGES CXX VERSION 0.0.1)
include_directories(include)
add_subdirectory(src)
add_subdirectory(tests)
file(GLOB SOURCES "*.cpp")
来源:
add_library(fact factorial.cpp)
测试:
add_executable(test test_factorial.cpp)
target_link_libraries(test Catch2::Catch2)
但基本上我有一个 test_factorial.cpp 文件,其中包含 header factorial.hpp(在包含目录中),因此应该知道 Factorial(int) 函数的存在,但它说它未定义。
我尝试的是:
cd build/
cmake ..
make
我希望 make
可以工作,但我得到:
Undefined symbols for architecture x86_64:
"Factorial(int)", referenced from:
____C_A_T_C_H____T_E_S_T____0() in test_factorial.cpp.o
"Catch::NameAndTags::NameAndTags(Catch::StringRef const&, Catch::StringRef const&)", referenced from:
___cxx_global_var_init in test_factorial.cpp.o
"Catch::StringMaker<int, void>::convert(int)", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > Catch::Detail::stringify<int>(int const&) in test_factorial.cpp.o (...)
正如我在评论中所写,将源文件 test_main.cpp
和库 fact
添加到 ./tests/CMakeLists.txt
。
add_executable(test test_main.cpp test_factorial.cpp)
target_link_libraries(test fact Catch2::Catch2)
我的项目结构非常简单,无法使用 CMake 进行编译。我已经尝试阅读有关 CMake 的文档或教程,但无法正常工作。
有一个
你可以看到我的完整代码here
但是相关的CMakeLists是:
根级别:
cmake_minimum_required(VERSION 3.5)
find_package(Catch2 REQUIRED)
project(majorityQueries LANGUAGES CXX VERSION 0.0.1)
include_directories(include)
add_subdirectory(src)
add_subdirectory(tests)
file(GLOB SOURCES "*.cpp")
来源:
add_library(fact factorial.cpp)
测试:
add_executable(test test_factorial.cpp)
target_link_libraries(test Catch2::Catch2)
但基本上我有一个 test_factorial.cpp 文件,其中包含 header factorial.hpp(在包含目录中),因此应该知道 Factorial(int) 函数的存在,但它说它未定义。
我尝试的是:
cd build/
cmake ..
make
我希望 make
可以工作,但我得到:
Undefined symbols for architecture x86_64:
"Factorial(int)", referenced from:
____C_A_T_C_H____T_E_S_T____0() in test_factorial.cpp.o
"Catch::NameAndTags::NameAndTags(Catch::StringRef const&, Catch::StringRef const&)", referenced from:
___cxx_global_var_init in test_factorial.cpp.o
"Catch::StringMaker<int, void>::convert(int)", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > Catch::Detail::stringify<int>(int const&) in test_factorial.cpp.o (...)
正如我在评论中所写,将源文件 test_main.cpp
和库 fact
添加到 ./tests/CMakeLists.txt
。
add_executable(test test_main.cpp test_factorial.cpp)
target_link_libraries(test fact Catch2::Catch2)