使用CMake构建项目,包括其他使用不同构建系统的库

4
我正在开发一个开源项目,其中使用C语言编写库,使用C++编写GUI界面,使用Cmake进行构建管理。这个项目刚刚开始,只有几个文件。我可以在我的Linux开发环境上成功生成makefile,在Windows上使用CMake生成Visual Studio项目文件。到目前为止一切都很顺利。
随着项目的发展,我需要一个测试框架。我对UnitTest++有很好的经验,它可以在所有流行的平台上工作得很好。
问题是,我不知道如何将UnitTest++构建与CMake集成(他们在Linux上使用makefile,在Windows上提供Visual Studio项目文件)。我需要在构建我的代码之前构建UnitTest++文件以生成库。我该如何在CMake中指定这一点,以便在Linux和Windows上都能工作?
1个回答

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)

太棒了。我复制了这个,创建了一个“CMakeList.txt”,并将子目录命令添加到我的顶层cmakelist文件中的“UnitTest++”目录中。现在一切都像魔术般地运行。非常感谢。 - Navaneeth K N
即使是 LGPL 许可证,删除许可信息也不好。请参考:http://code.google.com/p/firebreath/source/browse/src/unittest-cpp/UnitTest%2B%2B/CMakeLists.txt - the_void
我没有意识到它来自那里,但显然是这样,所以我已经添加了许可证信息。 - Kleist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接