簡體   English   中英

CMake 中后期構建自定義命令中的 Glob 文件

[英]Glob files in post build custom command in CMake

我正在使用 CMake 和 SWIG 從 C++ 代碼生成 C# 綁定。 這是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

有沒有辦法做到這一點? 我正在考慮在此之前添加另一個自定義命令,該命令使用lsgrep從輸出二進制目錄中獲取所有*.cs文件,但問題是我不知道如何將返回的字符串存儲在變量中。 SWIG 部分只是一個特定於我的案例的例子,但問題本質上更普遍。

為此,我能夠成功使用SWIG_SUPPORT_FILES 編輯:它不包含所有文件。

swig_add_library(foo
  TYPE SHARED
    LANGUAGE java
    SOURCES java.i
)
...
get_property(swigGeneratedFiles TARGET foo PROPERTY SWIG_SUPPORT_FILES)
add_jar(foobar
  ${swigGeneratedFiles}
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM