我正在尝试调试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 ....)
我已经看到里面有一些fixup_bundle
,但它们没有打印出来。
例如,在该文件(/usr/local/Cellar/cmake/3.4.3/share/cmake/Modules/BundleUtilities.cmake
)中包含的功能message(STATUS "fixup_bundle")
message(STATUS " app='${app}'")
message(STATUS " libs='${libs}'")
message(STATUS " dirs='${dirs}'")
开头有这些行:
make package VERBOSE=1
但是当我运行cmake时,即使使用STATUS
,也不会打印出来。
但是,如果我删除那些被打印的STATUS
,那么我想知道如何“使用MyConstants
消息
答案 0 :(得分:4)
我可以重现您的问题,如果CPack的源代码没有更改,您将无法获得状态消息。您遇到的行为是CPack目前的实施方式。
如果您查看CMake生成的package
makefile规则,您会发现类似的内容:
# 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
:
message(STATUS "+++ Test +++")
正如您已经测试过的那样,只有删除了STATUS
关键字,我才会看到该消息。所以我已经测试过从命令行直接调用:
> cpack.exe --verbose --debug --config ./CPackConfig.cmake
但仍然没有收到消息。在调试cpack.exe
时,我发现STATUS
条消息最终会调用cmake::UpdateProgress()
,而ProgressCallback
中根本没有设置CPack
。
我认为修复非常简单,但我不确定您是否愿意更改CMake的源代码或者如果你想在CMake's bug tracker中提出一张票。
修改:我已使用STATUS
消息成功测试了cpack.cxx
的以下代码扩展名:
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);
}
然后
int main (int argc, char const* const* argv)
{
[...]
cmake cminst;
cminst.SetProgressCallback(cpackProgress, &log);
[...]
}