2010-06-25 2 views
4

Я работаю над проектом с открытым исходным кодом, который использует C для библиотек, C++ для GUI и Cmake для управления сборкой. Этот проект только начался и имеет только пару файлов. Я могу успешно генерировать makefiles в моей среде разработки linux, а в Windows я могу сгенерировать файлы проекта Visual Studio с использованием CMake. Пока все работает хорошо.Создание проекта с CMake, включая другие библиотеки, которые используют разные системы сборки

Поскольку проект развивается, я нахожусь в стадии, когда мне нужна платформа для тестирования. У меня хороший опыт работы с UnitTest++, который будет хорошо работать на всех популярных платформах.

Проблема заключается в том, что у меня нет подсказки для интеграции сборки UnitTest++ с CMake (они используют файл makefile в файлах проекта linux и visual studio для окон). Мне нужно собрать файлы UnitTest++, чтобы создать библиотеку, прежде чем мой код будет построен. Как я могу указать это в CMake таким образом, который будет работать на linux и windows?

ответ

4

Я использую этот CMakeLists.txt:

#/**********************************************************\ 
#Original Author: Richard Bateman (taxilian) 
# 
#Created: Nov 20, 2009 
#License: Dual license model; choose one of two: 
#   New BSD License 
#   http://www.opensource.org/licenses/bsd-license.php 
#   - or - 
#   GNU Lesser General Public License, version 2.1 
#   http://www.gnu.org/licenses/lgpl-2.1.html 
#    
#Copyright 2009 PacketPass, Inc and the Firebreath development team 
#\**********************************************************/ 

cmake_minimum_required (VERSION 2.8) 

project (UnitTest++) 
message ("Generating project ${PROJECT_NAME}") 

include_directories (
    ${CMAKE_CURRENT_SOURCE_DIR}/src 
) 

list (APPEND SOURCES 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/AssertException.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/Test.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/Checks.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/TestRunner.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/TestResults.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/TestReporter.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/TestReporterStdout.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/ReportAssert.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/TestList.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/TimeConstraint.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/TestDetails.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/MemoryOutStream.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/DeferredTestReporter.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/DeferredTestResult.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/XmlTestReporter.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/CurrentTest.cpp 
) 

if (UNIX) 
    list(APPEND SOURCES 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/Posix/SignalTranslator.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/Posix/TimeHelpers.cpp 
    ) 
elseif (WIN32) 
    list(APPEND SOURCES 
    src/Win32/TimeHelpers.cpp 
    ) 
endif() 

add_library (UnitTest++ STATIC ${SOURCES}) 

add_definitions(
    -D_CRT_SECURE_NO_DEPRECATE 
) 

if (UNIX) 
    set_target_properties(UnitTest++ PROPERTIES 
    COMPILE_FLAGS "-g -Wall -W -ansi" 
    ) 
endif(UNIX) 
+0

Просто удивительный. Я скопировал это, создал «CMakeList.txt» в каталоге «UnitTest ++» и добавил команды подкаталогов в мои файлы cmakelist верхнего уровня. Сейчас все работает как шарм. Тебя очень люблю. –

+0

Неверно удалять информацию о лицензии, даже если 'LGPL': http://code.google.com/p/firebreath/source/browse/src/unittest-cpp/UnitTest%2B%2B/CMakeLists.txt –

+0

Я не понимал, что это произошло оттуда, но это очевидно, поэтому я добавил информацию о лицензии. – Kleist

Смежные вопросы