【问题标题】:CMake write header file using GLOB resultCMake使用GLOB结果写入头文件
【发布时间】:2011-08-18 07:10:13
【问题描述】:

我有一个 GLOB 表达式,例如:

file( GLOB HEADER_FILES path/*.h )

并且想生成一个包含每个 HEADER_FILES 条目定义的头文件。例如,如果文件名为“path/my_class.h”,那么宏应该是:

#define PATH_MY_CLASS_FILE /full/path/to/path/my_class.h

这可以使用 bash 轻松完成,但我们也针对 Windows 和 Visual Studio。有没有一种纯粹的 CMAKE 方法来完成这项工作?还是我必须编写一个快速的 C++ 程序并创建一个自定义依赖项/目标来生成文件?


根据我想出的答案:

file(WRITE headers.h "//Generated headers include\n")
foreach(header_path ${APP_SHARED_MOC_HEADERS})
    # drop full name for macro name
    string(REPLACE "${INCLUDE_DIR}/" "" header "${header_path}")
    # drop extension
    string(REPLACE ".h" "" header "${header}")

    string(REPLACE "/" "_" header "${header}")
    string(TOUPPER "${header}" define_name)

    file(APPEND headers.h "#define PATH_${define_name} ${header_path}\n")
endforeach()

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    试试这样的:

    file(GLOB HEADER_FILES path/*.h)
    
    foreach(header ${HEADERS_FILES})
      # here replace / for linux and \ for windows
      string(REPLACE "/" "_" header_path header) 
      string(TOUPPER header_path final_header_path)
      file(APPEND headers_defines_file define 
        PATH_${final_header_path} ${CMAKE_CURRENT_SOURCE_DIR}/header)
    endforeach(header)
    

    【讨论】:

    • 谢谢。通过一些更改,我有一个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2020-08-10
    • 2018-07-24
    • 1970-01-01
    • 2019-05-02
    • 2013-07-04
    相关资源
    最近更新 更多