C++ 如何将exe项目链接到另一个exe项目中的类

C++ 如何将exe项目链接到另一个exe项目中的类,c++,unit-testing,cmake,linker,exe,C++,Unit Testing,Cmake,Linker,Exe,假设您想对可执行文件中的类进行一些单元测试,但不想将它们重构到一个lib中,您可以使用cmake中的target\u link\u库(target library)添加lib 如何让测试类访问其他类 1) 是否使用其他项目的源文件生成测试项目? 另一件事 include_directories(${otherExeProjectDir}) set( SOURCE_FILES main.cpp tests.h tests.cpp ${otherE

假设您想对可执行文件中的类进行一些单元测试,但不想将它们重构到一个lib中,您可以使用cmake中的
target\u link\u库(target library)
添加lib

如何让测试类访问其他类

1) 是否使用其他项目的源文件生成测试项目? 另一件事

  include_directories(${otherExeProjectDir})

  set( SOURCE_FILES 
     main.cpp
     tests.h
     tests.cpp
     ${otherExeProjectDir}/otherclass1.h
     ${otherExeProjectDir}/otherclass2.h
   )
2) 是否将测试项目与其他项目的obj文件链接? 某种
添加库(otherclass.obj)
疯狂


3)

如果您的主要可执行源位置是简单的或平坦的,那么类似的方法可以工作:

cmake_minimum_required(VERSION 3.9)
project(tests)

# Get main executable source location properties
get_target_property(exe_sources exe SOURCES)
get_target_property(exe_source_dir exe SOURCE_DIR)

# Remove main entry point file
list(REMOVE_ITEM exe_sources main.cpp)

# Add test sources
add_executable(test1 test1.cpp)

# Add exe sources to test (assumes sources are relative paths)
foreach(src IN LISTS exe_sources)
  target_sources(test1 PRIVATE "${exe_source_dir}/${src}")
endforeach()

# Add exe include directories to test
target_include_directories(test1 PRIVATE 
  ${exe_source_dir}
  $<TARGET_PROPERTY:exe,INCLUDE_DIRECTORIES>)
cmake_最低要求(3.9版)
项目(测试)
#获取主可执行源位置属性
获取\u目标\u属性(exe\u源exe源)
获取\u目标\u属性(exe\u源\u目录exe源\u目录)
#删除主入口点文件
列表(删除项目exe\u源main.cpp)
#添加测试源
添加可执行文件(test1 test1.cpp)
#将exe源添加到测试(假设源是相对路径)
foreach(列表中的src exe_源)
目标源(test1私有“${exe\u source\u dir}/${src}”)
endforeach()
#添加要测试的exe包含目录
目标目录包括目录(test1私有目录
${exe\u source\u dir}
$)

否则,不幸的是,一般的解决方案是依赖一些外部信息,例如顶级源文件位置或将您自己的源属性添加到主可执行目标。

我不理解您的问题。说你的项目中有一个类,现在你想对这个类进行单元测试。您需要做的只是包含该类的头文件,编写单元测试代码和单元测试的主要功能。两个项目:其他项目和测试项目。其他项目有一个主要的测试项目。如果我只是简单地包含标题,测试项目将不知道在哪里查找标题。我不明白。你为什么不能把它包括进去呢。你看不到它在哪里吗?我说错了,如果你只是#包含一个标题,它仍然不知道实现在哪里,所以你最终会遇到lnk2019问题。