[英]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.