Глоб-файлы в пользовательской команде после сборки в CMake - PullRequest
0 голосов
/ 08 ноября 2018

Я генерирую привязки C # из кода C ++, используя CMake и SWIG. Вот часть CMakeLists.txt, которая вызывает SWIG и также делает то, что я хочу сделать, но неавтоматическим способом:

...

find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})

set(CMAKE_SWIG_FLAGS "")

set_source_files_properties(matrixsharp.i PROPERTIES CPLUSPLUS ON)

include_directories("../include/")

set(SOURCE_FILES
    lmfont.cpp
    lmsize.cpp
    lmpoint.cpp
    lmpanel.cpp)

swig_add_module(matrixsharp csharp matrixsharp.i ${SOURCE_FILES})

swig_link_libraries(matrixsharp matrix
                    ...) # Library dependencies

# TODO Don't add the cs files manually but instead try to glob these during the post-build stage and then pass onto the mcs command
set(CSHARP_TEST_APP_SRC
    ${CMAKE_CURRENT_SOURCE_DIR}/TestApp.cs
    ${CMAKE_CURRENT_BINARY_DIR}/LmFont.cs
    ${CMAKE_CURRENT_BINARY_DIR}/LmSize.cs
    ${CMAKE_CURRENT_BINARY_DIR}/LmPoint.cs
    ${CMAKE_CURRENT_BINARY_DIR}/LmMatrixProtocol.cs
    ${CMAKE_CURRENT_BINARY_DIR}/LmPanelType.cs
    ${CMAKE_CURRENT_BINARY_DIR}/LmPanel.cs
    ${CMAKE_CURRENT_BINARY_DIR}/SWIGTYPE_p_unsigned_char.cs
    ${CMAKE_CURRENT_BINARY_DIR}/MatrixSharpPINVOKE.cs
)

add_custom_command(TARGET matrixsharp
    POST_BUILD
    COMMAND mcs ${CSHARP_TEST_APP_SRC}
                -out:Test.exe
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Building C# Test.exe"
)

В процессе сборки все необходимые файлы *.cs создаются и помещаются в двоичный каталог. Поскольку для Test.exe требуются все файлы C #, было бы намного проще, если бы я мог каким-то образом вызвать glob на этапе после сборки (но до приведенной выше пользовательской команды), сохранить выходные данные в переменной и затем передать их пользовательская команда, которая вызывает mcs (моно-компилятор) для создания окончательного исполняемого файла Test.exe.

Есть ли способ сделать это? Я думал о добавлении другой пользовательской команды до этой, которая использует ls и grep, чтобы получить все файлы *.cs из выходного двоичного каталога, но проблема в том, что я не знаю, как сохранить возвращенную строку в Переменная. Часть SWIG - это просто пример, характерный для моего случая, но этот вопрос носит более общий характер.

...