假设您想对可执行文件中的类进行一些单元测试,但您不想将它们重构为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)
答案 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>)
否则,遗憾的是,一般的解决方案依赖于某些外部信息,例如:顶级源文件位置或将您自己的源属性添加到主可执行文件目标。