Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:如何区分这个库的库文件和单元测试? 我创建了一个C++库 MyLib ,其结构如下: MyLib/ |-- Module1/ |-- SubModule1/ |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- Module2/ |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- ... |-- CMakeLists.txt_C++_Unit Testing_Cmake_Static Libraries - Fatal编程技术网

CMake:如何区分这个库的库文件和单元测试? 我创建了一个C++库 MyLib ,其结构如下: MyLib/ |-- Module1/ |-- SubModule1/ |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- Module2/ |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- ... |-- CMakeLists.txt

CMake:如何区分这个库的库文件和单元测试? 我创建了一个C++库 MyLib ,其结构如下: MyLib/ |-- Module1/ |-- SubModule1/ |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- Module2/ |-- Tests/ |-- .cpp files (unit tests) |-- .cpp files (library sources) |-- ... |-- CMakeLists.txt,c++,unit-testing,cmake,static-libraries,C++,Unit Testing,Cmake,Static Libraries,换句话说,库的源文件分布在许多目录和子目录中。每个目录可能包含一个目录Tests,其中包含父目录中模块的单元测试 我正在使用CMake v2.8构建库(MyLib.a)和该库的单元测试(名为MyLibTests)的可执行文件)。以下是我用来实现这一目标的相关规则: #构建MyLib。 文件(全局递归MyLib\u源${CMAKE\u CURRENT\u SOURCE\u DIR}*.cpp) #筛选出单元测试的源文件。 foreach(项目${MyLib_SOURCES}) 如果(${ITEM}

换句话说,库的源文件分布在许多目录和子目录中。每个目录可能包含一个目录
Tests
,其中包含父目录中模块的单元测试

我正在使用CMake v2.8构建库(
MyLib.a
)和该库的单元测试(名为
MyLibTests
)的可执行文件)。以下是我用来实现这一目标的相关规则:

#构建MyLib。
文件(全局递归MyLib\u源${CMAKE\u CURRENT\u SOURCE\u DIR}*.cpp)
#筛选出单元测试的源文件。
foreach(项目${MyLib_SOURCES})
如果(${ITEM}匹配测试/*)
列表(删除项目MyLib\u源${ITEM})
endif()
endforeach()
添加库(MyLib STATIC${MyLib\u SOURCES})
#构建MyLibTests。
文件(GLOB\u RECURSE MyLib\u TESTS\u SOURCES${CMAKE\u CURRENT\u SOURCE\u DIR}*.cpp)
#过滤掉非单元测试源文件。
foreach(项目${MyLib\u TESTS\u SOURCES})
如果(不是${ITEM}匹配测试/*)
列表(删除项目MyLib测试源${ITEM})
endif()
endforeach()
添加可执行文件(MyLibTests${MyLib\u TESTS\u SOURCES})
目标链接库(MyLibTests MyLib${UNIT\u TESTS\u FRAMEWORK\u LIBS})

有没有更好的方法来查找哪些
.cpp
文件构成库,哪些
.cpp
文件是此库的单元测试?我无法为
文件(GLOB\u RECURSE…
找到一个合适的表达式,这样就可以了。

首先,CMake的开发人员建议不要将GLOB用于源文件,因为添加新文件不会强制CMake运行。第二,如果你想继续这样做,你不能将源文件移到src文件夹中,这样Tests文件夹就不会在GLOB search树中吗?@drescherjm First:我已经将我的项目设置为在make之前自动运行cmake。因此,添加或删除文件不是问题。第二:我可以,但我更愿意保持所描述的结构。然后,你可能不得不使用你目前的方法。尽管您可能希望将其设置为宏。