2014-05-17 2 views
5

У меня есть проект C++, который включает библиотеку libevent. Структура проекта:CMake исключает тесты в подкаталогах

. 
|_ CMakeLists.txt 
|_ Makefile 
|_ src 
| |_ my_lib.cpp 
|_ test 
| |_ my_lib_test.cpp 
|_ lib 
    |_ libevent 
    |_ CMakeLists.txt 
    |_ ... 

Когда я строю и запускаю свои тесты, также выполняются тесты с ливеной. Как я могу исключить их и запустить только свои собственные тесты?

ответ

3

Глядя на available options в файл CMakeLists.txt от libevent, кажется, что вы можете легко их отключить, установив EVENT__DISABLE_TESTS в ON.

Вы можете сделать это в своем собственном CMakeLists.txt, прежде чем Libevent входит:

set(EVENT__DISABLE_TESTS ON) 
... 
add_subdirectory(lib/libevent) 

или при вызове CMake в командной строке:

cmake . -DEVENT__DISABLE_TESTS=ON 
+0

Что делать, если это не только ливень в следующий раз? Существует ли стандартный способ CMake для отключения/включения тестов подпроектов? – PovilasB

+1

Нет. В этом случае вам просто повезло, что создатели libevent CMakeLists.txt приложили усилия для предоставления этой опции. Многие другие проекты имеют аналогичные варианты, чтобы избежать сборки тестов/examples/docs/etc. но многие этого не делают. Для тех, у кого это не так, вы должны * * модифицировать файлы CMakeLists.txt (например, чтобы удалить/пропустить все экземпляры команды ['add_test']). – Fraser

1

Существует также более общий способ сделать это. Добавить файл с именем CTestCustom.cmake в исходном дереве и добавить список тестов, которые вы хотите CTest не бежать:

set(CTEST_CUSTOM_TESTS_IGNORE 
    test1 
    .... 
    testN 
) 

Чем скопировать этот файл в каталог сборки, где выполняются тесты:

configure_file(${CMAKE_SOURCE_DIR}/CTestCustom.cmake ${CMAKE_BINARY_DIR}) 

Это приведет к тому, что CTest проигнорировать перечисленные тесты. См. this для получения дополнительной информации.