Cmake:文件没有复制

时间:2015-04-13 12:40:02

标签: cmake copy makefile fortran fortran90

我在一个由Fortran编写的大项目中工作。我们在CMake的帮助下构建它。我需要将函数“test_tsmparser.F90”所需的文件“plane.tsm”复制到构建目录中的相应位置。我已经为另一个功能做了一次,但现在它不起作用。

对应的CMakeList.txt:

include_directories(${CMAKE_BINARY_DIR}/src)
include_directories(${CMAKE_BINARY_DIR}/test)
include_directories(${CMAKE_BINARY_DIR}/utils/xml/sax)  

add_executable(test_tsmparser test_tsmparser.F90)

target_link_libraries(test_tsmparser testlib sax)

function (cm_export_file FILE DEST)
  if (NOT TARGET export-files)
    add_custom_target(export-files ALL COMMENT "Exporting files into build tree")
  endif (NOT TARGET export-files)
  get_filename_component(FILENAME "${FILE}" NAME)
  add_custom_command(TARGET export-files COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${DEST}/${FILENAME}")
  install(FILES "${FILE}" DESTINATION "${DEST}")
endfunction (cm_export_file)

cm_export_file("plane.tsm" "./")

奇怪的是,我创建了可执行的test_tsmparser,但是没有复制文件“plane.tsm”。这意味着什么?

问题可能是之前其他目标完全调用了相同的函数。

告诉我,如果您需要更多信息,因为我不知道还有哪些相关信息。

2 个答案:

答案 0 :(得分:2)

似乎我只需要更改这两个CMakeLists的目标名称。

感谢您的帮助。

答案 1 :(得分:0)

创建应生成输出的自定义命令时,您应该使用OUTPUT add_custom_command()签名,而不是TARGET签名:

function (cm_export_file FILE DEST)
  get_filename_component(FILENAME "${FILE}" NAME)
  add_custom_command(
    OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${DEST}/${FILENAME}"
    DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${DEST}/${FILENAME}"
  )
  set(copiedFiles ${copiedFiles} "${CMAKE_CURRENT_BINARY_DIR}/${DEST}/${FILENAME}" PARENT_SCOPE)
  install(FILES "${FILE}" DESTINATION "${DEST}")
endfunction (cm_export_file)

然后,完成所有调用后,创建将驱动命令的自定义目标:

add_custom_target(
  export-files ALL
  DEPENDS ${copiedFiles}
  COMMENT "Exporting files into build tree"
)