我正在编写一个自定义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.cmake这样的东西:
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>")
但它输出一个空字符串。有没有更好的方法来做这种事情?
答案 0 :(得分:1)
您需要使用try_run
命令。
请注意,这在交叉编译时不起作用,因为交叉编译任何构建的二进制文件时都无法在主机上运行。但是,如果这是你的最后一个选择,那就是你使用的。