簡體   English   中英

在CMake階段而不是在構建階段構建並運行C ++代碼

[英]Build and run C++ code during CMake stage rather than build stage

我正在編寫一個自定義CMake查找模塊以使用第三方庫,並希望提取其版本字符串以用於:

find_package_handle_standard_args(MySDK
                                  REQUIRED_VARS LIBRARY INCLUDE
                                  VERSION_VAR VERSION
)

但是,它的版本號不能作為標題中的文本使用,因此我必須構建一個小型c ++程序以將其打印到stdout:

#include <MySDK.h>
int main(int argc, const char * argv[]) {
    MySDK::Version version = MySDK::getVersion();
    std::cout << version.text << "\n";
    return 0;
}

我嘗試將以下內容添加到自定義的FindMySDK.c中:

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/version.cpp"
"
#include <MySDK.h>
int main(int argc, const char * argv[]) {
    MySDK::Version version = MySDK::getVersion();
    std::cout << version.text << \"\\n\";
    return 0;
}
"
)

add_executable(MySDKVersion
  EXCLUDE_FROM_ALL
  "${CMAKE_CURRENT_BINARY_DIR}/version.cpp"
)

target_include_directories(MySDKVersion SYSTEM PRIVATE ${MYSDK_INCLUDE_DIRS})
target_link_libraries(MySDKVersion ${MYSDK_LIBRARIES})

execute_process(COMMAND "$<TARGET_FILE:MySDKVersion>")

但是它輸出一個空字符串。 有沒有更好的方法來做這種事情?

您需要使用try_run命令。

請注意,這在交叉編譯時將不起作用,因為在交叉編譯時,任何已構建的二進制文件都無法在主機上運行。 但是,當這是您的最后選擇時,那就是您所使用的。

暫無
暫無

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

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