使用CMake

时间:2017-03-30 16:32:28

标签: gcc cmake

我希望这是一个简单的问题,我只是缺少一些基本的东西。

我试图使用CMake项目为嵌入式Cortex-M0目标模拟二进制构建管理器。我在确定如何为可执行目标的每个依赖项生成列表文件时遇到了一些麻烦。

当构建名为main.c的文件时,当前构建系统将-Wa,-alh=.\CortexM0\ARM_GCC_493\Debug/main.lst作为gcc的参数传递。我无法弄清楚如何让CMake使用当前文件名而不使用扩展名来保存文件。

我查看了get_filename_component命令,但它似乎只是获取输出的文件名:

add_executable(TestExe main.c)
get_filename_component(curr_name TestExe NAME_WM)
message(${curr_name})

正如预期的那样,这会打印TestExe,而不是main

是否有一个简单的变量我忽略了我可以放入我的工具链文件中的-Wa,-alh=${CURR_SOURCE}.lst CMAKE_C_FLAGS?或者其他一些我没见过的方法?

系统信息:

  • Windows 10
  • Msys shell
  • CMake 3.7.2
  • arm-none-eabi-gcc v4.9.3

1 个答案:

答案 0 :(得分:1)

您可以使用Expansion Rules并扩展CMAKE_C_COMPILE_OBJECT

calcPercent

但不幸的是

  • 没有扩展规则确实提供没有路径和扩展名的当前源文件
  • 因此您将获得上述示例for path, dirs, filename in os.walk(rootDir): #omit files, loop through later for dirname in dirs: fullpath = os.path.join(path,dirname) if "dcm" in dirname: dcm.append(fullpath) final = [] uni = 0 final.append(dcm[0]) for i in range(len(dcm)): if len(os.listdir(dcm[i])) < 10: pass elif dcm[i][16:19] != final[uni][16:19]: final.append(dcm[i]) uni += 1 tags = ((0x8, 0x70)),((0x8, 0x1090)), ((0x18, 0x1020)) values = [] printout = [] for p in range(len(final)): file = os.path.join(final[p],os.listdir(final[p])[0]) ds = dicom.read_file(file) printout.append([final[p]]) for k in range(len(tags)): printout.append([ds[tags[k]]]) 作为输出名称

脚注:在CMake生成的makefile项目中,如果只需要汇编文件,可以set(CMAKE_C_COMPILE_OBJECT "${CMAKE_C_COMPILE_OBJECT} -Wa,-alh=<OBJECT>.lst") 或预处理文件main.c.o.lst