0

Makefileを使用して日付とビルド番号を使用してリンク変数を追加する方法のすばらしい例を見つけました。

OBJECTS=main.o
BUILD_NUMBER_LDFLAGS  = -Xlinker --defsym -Xlinker __BUILD_DATE=$$(date +'%Y%m%d')
BUILD_NUMBER_LDFLAGS += -Xlinker --defsym -Xlinker __BUILD_NUMBER=$$(cat buildnumber.num)

a.out: $(OBJECTS) buildnumber.num
    $(CC) $(LDFLAGS) $(BUILD_NUMBER_LDFLAGS) -o $@ $(OBJECTS)
buildnumber.num: $(OBJECTS)
    @if ! test -f buildnumber.num; then echo 0 > buildnumber.num; fi
    @echo $$(($$(cat buildnumber.num)+1)) > buildnumber.num

しかし、CMakeLists.txtでこれを繰り返す試みはすべて失敗します... :-(例:

ADD_CUSTOM_COMMAND(OUTPUT buildnumber.num 
    COMMAND @if ! test -f buildnumber.num; then echo 0 > buildnumber.num; fi
    COMMAND @echo $$(($$(cat buildnumber.num) + 1)) > buildnumber.num)

file (GLOB_RECURSE MAIN_SOURCES FOLLOW_SYMLINKS ./src/*.cpp)
add_custom_target(buildnumber.num DEPENDS ${MAIN_SOURCES})

これをcmakeで実装する方法に非常に感謝します。

4

1 に答える 1

0

@アンドレ

まあ、私は欲しいものを手に入れましたが、私はこのようなものの初心者なので、いくつかの不器用な方法で。これを改善する方法(主に個別のファイルを回避する方法)をアドバイスしてください。これはCMakeLists.txtファイルです。

include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(CMAKE_EXE_LINKER_FLAGS " /Projects/Testnum/linker.scr")
add_custom_target(stam ALL COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/custom.cmake) 
add_executable(foo main.c ) 
add_dependencies(foo stam)

これは追加のcustom.cmakeファイルです:

execute_process(COMMAND increment.scr )
execute_process(COMMAND cat buildnumber OUTPUT_VARIABLE _output OUTPUT_STRIP_TRAILING_WHITESPACE)
file(WRITE linker.scr "__BUILD_NUM = ${_output} ;")

これは、custom.cmakeに挿入できなかったincrement.csrファイルです。

#!/bin/bash
var=`cat buildnumber`; sum=$((1 + $var )); echo $sum >buildnumber

そして最後に、これはmain.cです。

#include <stdio.h>
extern char* __BUILD_NUM;
int main()
{
  printf("LINK_TIME_VALUE: %d\n", (int)&__BUILD_NUM);
  return 0;
}

すべてが機能しますが、不器用すぎるようです。

于 2012-07-14T09:23:54.650 に答える