【问题标题】:Convert THIS make to cmake将此 make 转换为 cmake
【发布时间】:2012-07-13 00:05:52
【问题描述】:

我发现了如何使用 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 中实现这一点。

【问题讨论】:

  • 您真的希望它由链接器添加吗?或者是单个重新配置的.cpp 文件有两个#defines 也可以(见stackoverflow.com/questions/7900661/…)?
  • 是的,我愿意。因为链接器变量将始终具有正确的值,我希望它们在每次编译时更新。此外,使用链接器变量要快得多,因为不需要重新编译...:-)

标签: makefile cmake


【解决方案1】:

@安德烈

嗯,我得到了我想要的东西,但是有点笨拙,因为我是这方面的新手。请建议如何改进这一点(主要是如何避免单独的文件)。这是 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} ;")

这是increment.csr文件,我没有成功插入custom.cmake:

#!/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;
}

一切正常,但似乎太笨拙了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2017-10-01
    • 2013-09-11
    相关资源
    最近更新 更多