2017-07-26 88 views
1

假设您想对可执行文件中的类执行一些单元测试,但不想将它们重构为可以使用target_link_libraries(target library)添加该库的lib在cmake。如何将exe项目链接到另一个exe项目中的类

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

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

我不明白你的问题。说你在你的项目中有一门课,现在你想为这门课做单元测试。你需要做的只是包含该类的头文件,并为你的单元测试编写代码,并为你的单元测试编写一个主函数。 – Yves

+0

两个项目:其他项目和测试项目。其他项目和测试项目一样主要。如果我简单地包含它,测试项目将不知道在哪里查找标题。 – codeMetis

+0

我不明白。为什么你不能包括它。你不能看到它在哪里吗? – Yves

回答

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

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