C++ CMake:尝试将链接库添加到未在此目录中生成的目标

C++ CMake:尝试将链接库添加到未在此目录中生成的目标,c++,unit-testing,boost,cmake,C++,Unit Testing,Boost,Cmake,在我的cmake项目中编译一些单元测试时遇到了一个问题。这个想法是将这些boost单元测试添加为可执行文件,这样我就可以运行它们了。无论如何,我得到了这个错误,我不明白,这是说我不能链接我的cpp单元测试,它必须链接到测试我构建的库。我试图链接并添加为可执行文件的两个单元测试是DownloadTickers.cpp和GetTickersForLetter.cpp 我的目录结构如下: > Algo > build (this is where I do: cmake .. whic

在我的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)
爬行器的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中将DownloadTicker和GetTickersForLetter注册为可执行文件,然后知道如何将其链接到目标,但我不知道为什么会出现此错误。非常感谢您的帮助。谢谢。

目标链接库指令需要与
添加可执行文件
指令属于相同的
CMakeLists.txt
。这也适用于图书馆。将每个目录和相关的
CMakeLists.txt
视为一个子项目。

target\u link\u库
调用与
add\u executable
@Peter放在同一个CMakeLists.txt中-为什么不将其作为“答案”,这样我就可以投票了?解决方案对我有效。FWIW:我遇到了这个问题,但在自定义.cmake脚本中定义的函数中。。。有解决办法吗?试图为作为参数传入的目标附加覆盖率标志…@helmesjo这听起来像是另一个问题。问一个新问题?相同的错误消息,但是的,可能需要将其作为一个单独的问题。无论如何谢谢你!现在,在CMake 3.13及更高版本中,默认情况下已禁用此功能。