CMake файл заголовка записи, используя результат GLOB - PullRequest
1 голос
/ 04 мая 2011

У меня есть выражение GLOB, например:

file( GLOB HEADER_FILES path/*.h )

И хотел бы создать файл заголовка, который содержит определение для каждой записи HEADER_FILES. Например, если файл называется «путь / 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()

1 Ответ

2 голосов
/ 04 мая 2011

Попробуйте что-то вроде этого:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...