使用CMake构建项目,包括使用不同构建系统的其他库
问题描述:
我正在开发一个开源项目,其中使用C
用于库,C++
用于GUI,Cmake
用于管理构建。这个项目刚刚开始,只有几个文件。我可以在我的Linux开发环境中成功生成makefiles
,并且在Windows上我可以使用CMake生成Visual Studio
项目文件。迄今为止所有的工作都很好使用CMake构建项目,包括使用不同构建系统的其他库
随着项目的不断发展,我处于一个需要测试框架的阶段。我对UnitTest++
有很好的使用经验,可以在所有流行的平台上使用。
问题是,我不知道如何将UnitTest++
构建与CMake
(他们在linux上使用makefile,而visual studio项目文件可用于windows)进行整合。在构建代码之前,我需要构建UnitTest++
文件以生成库。我怎样才能在Linux和Windows上工作的方式在CMake中指定它?
答
我使用这个的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文件中。现在一切都像魅力一样运作。非常感谢。 – 2010-06-25 17:54:23
删除许可证信息并不好,即使是'LGPL':http://code.google.com/p/firebreath/source/browse/src/unittest-cpp/UnitTest%2B%2B/CMakeLists.txt – 2010-06-25 20:09:32
我没有意识到它来自那里,但很明显,所以我添加了许可证信息。 – Kleist 2010-06-26 07:56:04