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

时间:2017-07-26 01:26:12

标签: c++ unit-testing cmake linker exe

假设您想对可执行文件中的类进行一些单元测试,但您不想将它们重构为lib,您可以在cmake中使用target_link_libraries( target library )添加lib。

如何让测试类访问其他类?

1)使用其他项目的源文件构建测试项目?    另一件事

  include_directories(${otherExeProjectDir})

  set( SOURCE_FILES 
     main.cpp
     tests.h
     tests.cpp
     ${otherExeProjectDir}/otherclass1.h
     ${otherExeProjectDir}/otherclass2.h
   )

2)将测试项目与其他项目的obj文件链接? 某种add_library( otherclass.obj )疯狂?

3)

1 个答案:

答案 0 :(得分:2)

如果您的主要可执行文件源位置简单或扁平,那么这样的东西可以起作用:

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>)

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