CMAKE:如何设置包含给定目标路径和文件名的编译器标志

CMAKE:如何设置包含给定目标路径和文件名的编译器标志,cmake,build,cross-compiling,armcc,Cmake,Build,Cross Compiling,Armcc,我正在开发一个CMAKE构建系统,该系统在Windows中使用Keil ARMCC工具集交叉编译ARM CortexM4 我设置c编译器标志如下 set(CMAKE_C_FLAGS "-c --c99 --cpu=Cortex-M4.fp.sp --apcs=interwork --split_sections") 但是,ARMCC编译器具有需要输入目标路径和文件名的选项。例如,对于每个c源文件,除了对象文件输出外,我还需要通过添加以下格式的编译器选项来输出源浏览器信息和

我正在开发一个CMAKE构建系统,该系统在Windows中使用Keil ARMCC工具集交叉编译ARM CortexM4

我设置c编译器标志如下

set(CMAKE_C_FLAGS  "-c --c99 --cpu=Cortex-M4.fp.sp --apcs=interwork --split_sections")
但是,ARMCC编译器具有需要输入目标路径和文件名的选项。例如,对于每个c源文件,除了对象文件输出外,我还需要通过添加以下格式的编译器选项来输出源浏览器信息和源依赖性:

--omf_browse=my_output_path/the_current_source_file.crf and --depend my_output_path/the_current_source_file.d
如何将上述选项添加到CMAKE_C_标志


谢谢

简单的方法是为每个需要的源文件设置属性

这是测试CMakeLists.txt

project(TestSourceProp)

set(SOURCE_FILES
    main.c
    file.c
)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

foreach(SRC_ IN LISTS SOURCE_FILES)
    get_filename_component(SRC_BASENAME_ ${SRC_} NAME_WE)
    set_source_files_properties(${SRC_} PROPERTIES COMPILE_OPTIONS "--omf_browse=${SRC_BASENAME_}.crf;--depend=${SRC_BASENAME_}.d")
    get_source_file_property(SRC_PROP_ ${SRC_} COMPILE_OPTIONS)
    message(STATUS "${SRC_}: ${SRC_PROP_}")
endforeach()
输出:

...
-- main.c: --omf_browse=main.crf;--depend=main.d
-- file.c: --omf_browse=file.crf;--depend=file.d
-- Configuring done
生成文件:

CMakeFiles/TestSourceProp.dir/main.c.obj: ../main.c
    @$(CMAKE_COMMAND) -E cmake_echo_color ...
    gcc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) --omf_browse=main.crf --depend=main.d -o CMakeFiles/TestSourceProp.dir/main.c.obj -c ...

我认为,另一种方法是创建自定义文件。

查看gcc编译器没有需要输入文件名或路径的选项。从示例中可以看到,gcc编译器标志简单地设置为“-g3-Og-Wall-pedantic-DDEBUG”,基本上,这个问题相当于armcc编译器中的“如何为一个产生多个输出文件的输入源文件设置编译器标志”,除了对象输出文件--omf_browse和--dependen选项还输出浏览信息文件和dependen文件,但是语法要求在选项后面提供一个文件名。它类似于VisualStudioC++编译器PDB文件,CGuess已经有内置的机制来自动给出一个名称(它与源文件名相同,不同的后缀)。我想知道如何在armcc编译器中实现同样的功能。谢谢@dmarty,这是一个可行的解决方案,虽然不那么优雅,但还是可行的。我不知道为什么CMAKE让它变得如此困难,而其他构建系统,如Scons,make可以轻松做到这一点。