【问题标题】:Building a project with CMake including other libraries which uses different build systems使用 CMake 构建项目,包括使用不同构建系统的其他库
【发布时间】:2011-03-08 07:55:00
【问题描述】:

我正在开发一个开源项目,该项目使用 C 用于库,C++ 用于 GUI,Cmake 用于管理构建。这个项目刚刚开始,只有几个文件。我可以在我的 linux 开发环境中成功生成makefiles,在 Windows 上我可以使用 CMake 生成Visual Studio 项目文件。到目前为止一切正常。

随着项目的发展,我正处于需要一个测试框架的阶段。我对UnitTest++ 有很好的经验,它适用于所有流行的平台。

问题是,我不知道将UnitTest++ 构建与CMake 集成(他们在Linux 上使用makefile,而Visual Studio 项目文件可用于Windows)。在构建代码之前,我需要构建 UnitTest++ 文件以生成库。如何在 CMake 中以适用于 linux 和 windows 的方式指定它?

【问题讨论】:

    标签: c++ c build cmake unittest++


    【解决方案1】:

    我正在使用这个 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)
    

    【讨论】:

    • 太棒了。我复制了这个,在UnitTest++ 目录中创建了一个CMakeList.txt,并将子目录命令添加到我的顶级cmakelist 文件中。现在一切都像魅力一样。非常感谢。
    • 我没有意识到它来自那里,但它显然是来自那里,所以我添加了许可证信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    相关资源
    最近更新 更多