4 Stimmen

Erstellen eines Projekts mit CMake einschließlich anderer Bibliotheken, die unterschiedliche Build-Systeme verwenden

Ich arbeite an einem Open-Source-Projekt, das die C für Bibliotheken, C++ für GUI und Cmake für die Verwaltung des Builds. Dieses Projekt ist gerade erst gestartet und hat nur ein paar Dateien. Ich kann erfolgreich generieren makefiles in meiner Linux-Entwicklungsumgebung und unter Windows kann ich Visual Studio Projektdateien mit CMake. Alles funktioniert gut so weit.

Da sich das Projekt weiterentwickelt, bin ich in einer Phase, in der ich einen Testrahmen benötige. Ich habe gute Erfahrungen mit UnitTest++ die auf allen gängigen Plattformen gut funktionieren wird.

Das Problem ist, dass ich keine Ahnung habe, wie ich die UnitTest++ bauen mit CMake (unter Linux wird makefile verwendet, und für Windows gibt es Visual Studio-Projektdateien). Ich brauche zu bauen UnitTest++ Dateien, um eine Bibliothek zu erzeugen, bevor mein Code gebaut wird. Wie kann ich dies in CMake in einer Weise angeben, die auf Linux und Windows funktioniert?

4voto

Kleist Punkte 7455

Ich verwende diese 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 Stimmen

Einfach fantastisch. Ich habe das kopiert, eine CMakeList.txt im UnitTest++ Verzeichnis und fügte Befehle für Unterverzeichnisse zu meinen cmakelist-Dateien der obersten Ebene hinzu. Jetzt funktioniert alles wie am Schnürchen. Herzlichen Dank.

0 Stimmen

Es ist nicht schön, die Lizenzinformationen zu entfernen, auch wenn LGPL : code.google.com/p/firebreath/source/browse/src/unittest-cpp/

0 Stimmen

Mir war nicht klar, dass es von dort kommt, aber offensichtlich ist es so, also habe ich die Lizenzinformationen hinzugefügt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X