Travis-CI Complex Makefile失败

时间:2017-07-22 23:05:41

标签: c++ makefile travis-ci

我是使用Travis-CI的新手,我开始使用的C ++项目使用GNU Makefile,makefile包含许多函数,其中一个函数调用其他函数。我注意到在Travis-CI日志中,此函数未成功调用其他函数,而是留下空白,导致构建失败。尽管它可以在任何计算机上运行。

功能是:

define Compile
mkdir -p $(@D)
if [[ $(2) == Linking ]]; then \
  $(call Print,$(2) $(@F),$(WIDTH)); \
else \
  $(call PrintCpp,$(2) $(@F),$(WIDTH)); \
fi
$(1) 2> $@.log; \
  RESULT=$$?; \
  if [ $$RESULT -ne 0 ]; then \
    $(cross); \
  else \
    $(check); \
  fi; \
  cat $@.log; \
  rm -f $@.log
endef

调用的函数是:

define Line = 
$(shell printf '%0.1s' "$(2)"{1..$(1)})
endef

define Print
var="$(1)"; \
    width="$(2)";\
    printf '%s%*.*s' "$$var" 0 $$(($$width - $${#var} - 1)) "$(call 
Line,$(2),.)"
endef

define PrintCpp
var="$(1)"; \
    var=$${var%.*}.cpp; \
    width="$(2)";\
    printf '%s%*.*s' "$$var" 0 $$(($$width - $${#var} - 1)) "$(call 
Line,$(2),.)"
endef

define check =
    printf "%b\n" "$(OK_COLOR)\xE2\x9C\x94 $(NO_COLOR)"
endef

define cross =
    printf "%b\n" "$(ERR_COLOR)\xE2\x9D\x8C $(NO_COLOR)"
endef

项目的GitHub可以在这里找到: https://github.com/LuxAtrumStudio/Pessum

Travis-CI登录: https://travis-ci.org/LuxAtrumStudio/Pessum/builds/256427744

1 个答案:

答案 0 :(得分:0)

我遇到了一个非常类似的问题,这是因为Travis在默认情况下仍使用已弃用的Ubuntu Trusty版本。 Trusty仅具有GNU Make版本3,而我们需要GNU Make> 4。

当我通过将以下内容添加到我的func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let viewSize = collectionView.bounds.size var cellWidth = viewSize.width / 2 if let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout { let usableViewWidth = viewSize.width - flowLayout.sectionInset.left - flowLayout.sectionInset.right cellWidth = usableViewWidth / 2 - flowLayout.minimumInteritemSpacing / 2 } return CGSize(width: cellWidth, height: cellWidth) } 中来将Travis切换到Ubuntu Xenial时,我的问题已解决:

.travis.yml

在从Trusty切换到Xenial之前,dist: xenial 位于GNU Make 3.81。切换后,make -v现在位于GNU Make 4.1

切换到Xenial可能需要您进行一些其他更改。例如,我不得不将我的Python版本从3.4提高到3.7。