我在我的cmake项目中编译一些单元测试时遇到了问题。想法是将这些boost单元测试添加为可执行文件,以便我可以运行它们。无论如何,我得到了一个错误,我不太理解,它说我不能链接我的cpp单元测试,必须链接它们来测试我构建的库。我正在尝试链接和添加为可执行文件的两个单元测试是DownloadTickers.cpp和GetTickersForLetter.cpp。
我的目录结构如下:
> Algo
> build (this is where I do: cmake .. which gives me errors)
-CMakeLists.txt (top level cmake)
-algo.h.ini
-run.cpp
> NetworkModule
> CrawlTickers
-CMakeLists.txt
-CrawlTickers.cpp
-CrawlTickers.hpp
> tests
-CMakeLists.txt
-DownloadTickers.cpp
-GetTickersForLetter.cpp
Algo的CMakeLists.txt如下:
cmake_minimum_required (VERSION 2.8)
project (Algo)
set (Algo_VERSION_MAJOR 0)
set (Algo_VERSION_MINOR 1)
set (CMAKE_CXX_COMPILER g++-4.8)
set (CMAKE_BUILD_TYPE Release)
add_definitions(
-std=c++11
)
configure_file(
"${PROJECT_SOURCE_DIR}/algo.h.in"
"${PROJECT_BINARY_DIR}/algo.h"
)
include_directories("${PROJECT_BINARY_DIR}")
add_subdirectory(NetworkModule/CrawlTickers)
add_executable(Run run.cpp)
CrawlTickers的CMakeLists.txt文件:
find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
add_library(CrawlTickers SHARED CrawlTickers.cpp)
add_subdirectory(tests)
target_link_libraries(
CrawlTickers
cpprest
)
target_link_libraries(
DownloadTickers
CrawlTickers
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
)
target_link_libraries(
GetTickersForLetter
CrawlTickers
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
)
测试的CMakeLists.txt为:
add_executable( DownloadTickers DownloadTickers.cpp )
add_executable( GetTickersForLetter GetTickersForLetter.cpp )
我的想法是cmake会自然地在CrawlTickers的CMakeLists.txt文件中注册DownloadTickers和GetTickersForLetter作为可执行文件,然后知道如何将其链接到目标,但我不知道为什么会出现这个错误。非常感谢任何帮助。谢谢。
target_link_libraries
的调用放在与add_executable
相同的CMakeLists.txt文件中。 - Peter