首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmake:从内部.cmake打印消息

cmake:从内部.cmake打印消息
EN

Stack Overflow用户
提问于 2016-02-18 08:57:58
回答 1查看 3.6K关注 0票数 5

我正在尝试调试一个在make package中遇到的问题

代码语言:javascript
复制
CMake Error at /usr/local/Cellar/cmake/3.4.3/share/cmake/Modules/BundleUtilities.cmake:861 (message):
    error: fixup_bundle: not a valid bundle

我看到里面有一些message(STATUS ....),但没有打印出来。

例如,在该文件(/usr/local/Cellar/cmake/3.4.3/share/cmake/Modules/BundleUtilities.cmake)中包含的funcion /usr/local/Cellar/cmake/3.4.3/share/cmake/Modules/BundleUtilities.cmake开始时,有以下几行:

代码语言:javascript
复制
message(STATUS "fixup_bundle")
message(STATUS "  app='${app}'")
message(STATUS "  libs='${libs}'")
message(STATUS "  dirs='${dirs}'")

但是,当我运行cmake时,即使使用make package VERBOSE=1,也不会打印这些内容。

但是如果我删除那些被打印出来的STATUS,我想知道如何"actvate“STATUS消息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-16 09:10:57

我可以重现您的问题,如果CPack的源代码不被更改,您将得不到状态消息。您正在经历的行为是CPack当前是如何实现的。

如果您查看CMake生成的package makefile规则,您会发现如下所示:

代码语言:javascript
复制
# Special rule for the target package
package: preinstall
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
    [your path here]/cpack.exe --config ./CPackConfig.cmake
.PHONY : package

所以,在执行cpack.exe时,您要调用make package。为了重现您的问题,我只是将下面的一行添加到CPackConfig.cmake

代码语言:javascript
复制
message(STATUS "+++ Test +++")

正如您已经测试过的那样,只有当我删除STATUS关键字时,我才会看到消息。因此,我测试了直接从命令行调用:

代码语言:javascript
复制
> cpack.exe --verbose --debug --config ./CPackConfig.cmake

但还是没收到消息。在调试cpack.exe时,我可以看到STATUS消息最终会调用cmake::UpdateProgress(),而且CPack中根本没有设置ProgressCallback

我认为修复非常简单,但我不确定您是否愿意更改CMake的源代码,或者您是否想在CMake氏虫追踪器中获得一张票。

编辑:我已经成功地用STATUS消息测试了cpack.cxx的以下代码扩展:

代码语言:javascript
复制
void cpackProgress(const char *msg, float prog, void* ptr)
{
    (void)prog;
    cmCPackLog* log = static_cast<cmCPackLog*>(ptr);
    cmCPack_Log(log, cmCPackLog::LOG_OUTPUT, msg << std::endl);
}

然后

代码语言:javascript
复制
int main (int argc, char const* const* argv)
{
    [...]
    cmake cminst;
    cminst.SetProgressCallback(cpackProgress, &log);
    [...]
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35476834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档