2012-07-11 73 views
14

我想为我的cmake构建添加一个自定义构建类型,目标是代码覆盖率。如何将自定义构建类型添加到cmake? (目标制造)

我已经找到了FAQ条目一下:http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_specify_my_own_configurations_.28for_generators_that_allow_it.29_.3F

但是,我不能使它发挥作用。

这里是我的代码,使用cmake 2.8.5:

message("* Adding build types...") 
if(CMAKE_CONFIGURATION_TYPES) 
    list(APPEND CMAKE_CONFIGURATION_TYPES CodeCoverage) 
    list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES) 
    set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING 
     "Add the configurations that we need" 
     FORCE) 
    message(" Available build types are now : ${CMAKE_CONFIGURATION_TYPES}") 
else() 
    message(" XXX custom build types are not allowed...") 
endif() 

我也得到“XXX自定义生成类型不准......” ......

回答

19

发现了问题:有添加自定义之间的混淆构建和定制配置

  • 配置小号是像Visual Studio或XCode的
  • 构建类型专用工具是更rawer功能

所以添加自定义生成类型,就没有必要操纵CMAKE_CONFIGURATION_TYPES可变的。只要设置相应的变量,并开始使用它,explained

SET(GCC_DEBUG_FLAGS "-g -Wall") 

# Add new build types 
message("* Adding build types...") 
SET(CMAKE_CXX_FLAGS_COVERAGE 
    "${GCC_DEBUG_FLAGS} -fprofile-arcs -ftest-coverage" 
    CACHE STRING "Flags used by the C++ compiler during coverage builds." 
    FORCE) 
SET(CMAKE_C_FLAGS_COVERAGE 
    "${GCC_DEBUG_FLAGS} -fprofile-arcs -ftest-coverage" 
    CACHE STRING "Flags used by the C compiler during coverage builds." 
    FORCE) 
SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE 
    "" 
    CACHE STRING "Flags used for linking binaries during coverage builds." 
    FORCE) 
SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE 
    "" 
    CACHE STRING "Flags used by the shared libraries linker during coverage builds." 
    FORCE) 
MARK_AS_ADVANCED(
    CMAKE_CXX_FLAGS_COVERAGE 
    CMAKE_C_FLAGS_COVERAGE 
    CMAKE_EXE_LINKER_FLAGS_COVERAGE 
    CMAKE_SHARED_LINKER_FLAGS_COVERAGE) 

我们可能还需要uDate公司的帮助字符串(连同setting the default build type的方式):

IF(NOT CMAKE_BUILD_TYPE) 
    SET(CMAKE_BUILD_TYPE Debug 
     CACHE STRING "Choose the type of build : None Debug Release RelWithDebInfo MinSizeRel Coverage." 
     FORCE) 
ENDIF(NOT CMAKE_BUILD_TYPE) 
message("* Current build type is : ${CMAKE_BUILD_TYPE}") 

警告有关的位试图继承另一个构建类型的默认选项这样做:

SET(CMAKE_CXX_FLAGS_COVERAGE 
    "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage" 
    CACHE STRING "Flags used by the C++ compiler during coverage builds." 
    FORCE) 

这是一个不好的的想法,因为每次配置再次来源时(每次你改变它的内容),附加选项都会被附加。

+3

您可以从另一个构建类型继承默认选项,但不应该@set(.. CACHE ... FORCE)@复合变量,否则您将看到此附加行为。传播到你的Makefile中的变量值不需要被缓存。 – mabraham 2013-08-01 21:21:14

+4

最近的答案[这里](http://stackoverflow.com/a/24470998/1938798)给出了一个更完整和技术上正确的解释这个话题。 – 2016-11-19 08:27:36

相关问题