在 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.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>")
但它输出一个空字符串。有没有更好的方法来做这种事情?
您需要
使用 try_run
命令。
因为在交叉编译时,任何构建的二进制文件都无法在主机上运行。但是,当这是您的最后选择时,这就是您使用的。
相关文章:
- 我在c++代码中生成了一个运行时#3异常
- 无法运行生成后事件 (C++)
- 我可以根据用户输入在运行时生成"循环"吗?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 无法在 Visual Studio 代码中生成和运行 C++ 代码
- 未完全运行生成文件
- 生成文件无法在运行时链接库
- glfw 的基本设置会导致与 emscripten 生成的 js 文件中的事件侦听器有关的运行时错误
- 如何使用模板生成常规参数列表并将其传递给运行时函数?
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 这段代码在获得错误输入时不会阻止 stoi 运行
- 如何从 QWizardPage 和访问字段()运行 QThread
- LLVM:生成运行时错误
- 为什么这段代码运行这么慢
- 执行生成运行时代码的递归模板
- 是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序
- NetBeans 在生成+运行时无法识别C++类成员
- 在 Windows 上的 C++ 中生成运行时声音
- 来自cmath的函数生成运行时无限循环(没有这样的文件或目录)
- 从另一台PC/VS生成/运行项目时缺少MSVCR100D.dll