CMake,CMP0046,自动生成源。如何抑制警告?

时间:2015-03-23 09:48:24

标签: cmake

考虑使用CMake构建的Visual Studio的以下玩具项目。

档案CMakeLists.txt:

cmake_minimum_required (VERSION 2.8)
project(CMP0046)

# cmake_policy(SET CMP0046 OLD)   <----

add_executable(an_exec a.cpp)

configure_file(data_file.txt data_file.txt.c @ONLY)
add_custom_command(OUTPUT data_file.txt.c
                   COMMAND ${CMAKE_COMMAND} data_file.txt data_file.txt.c -P ${PROJECT_SOURCE_DIR}/gen_file.cmake
                   MAIN_DEPENDENCY data_file.txt)
add_dependencies(an_exec data_file.txt.c)

文件gen_file.cmake

if (CMAKE_ARGV2)
    configure_file(${CMAKE_ARGV1} ${CMAKE_ARGV2})
endif()

文件a.cppdata_file.txt目前是空的,因为它们的内容并不重要。

树点:

  • C源data_file.txt.c是使用CMake从data_file.txt生成的;
  • 原始数据文件在开发期间发生了变化,我希望自动重新生成data_file.txt.c以反映所有最近的更改
  • 我想在没有更改的情况下在其他项目中使用此解决方案,因此,我应该考虑这些文件的数量和名称各不相同。例如,这些可能是OpenCL来源。

当前的CMake脚本不会更改CMP0046策略(上面标有箭头的注释行),当我按下CMake GUI中的“生成”按钮时,这会导致有关缺少依赖关系的警告。

我有两个目标:

  • 以避免这些警告
  • 避免在溶液中出现这些中间自生生的.c源

如果我取消注释该行并将CMP0046设置为OLD,则CMake很安静。但是,我在这里建议:What is the scope of CMake policies?,这是不正确的。

我更喜欢add_custom_command而不是add_custom_target,因为自定义目标会在生成的VS解决方案中显示为单独的项目。例如,这些行添加到CMakeLists.txt:

add_custom_target(data_file_txt_c
                  COMMAND ${CMAKE_COMMAND} data_file.txt data_file.txt.c -P ${PROJECT_SOURCE_DIR}/gen_file.cmake
                  DEPENDS data_file.txt)
add_dependencies(an_exec data_file_txt_c)

导致Visual Studio解决方案,其中添加了一个名为data_file_txt_c的新项目,我希望避免这种情况。

那么,什么是最好的解决方案?

0 个答案:

没有答案