我正在尝试调试我在以下过程中遇到的问题make package:
CMake Error at /usr/local/Cellar/cmake/3.4.3/share/cmake/Modules/BundleUtilities.cmake:861 (message):
error: fixup_bundle: not a valid bundle
Run Code Online (Sandbox Code Playgroud)
我看到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}'")
Run Code Online (Sandbox Code Playgroud)
但是当我运行 cmake 时,即使使用make package VERBOSE=1.
但如果我删除那些STATUS被打印的内容,那么我想知道如何“激活”这些STATUS消息
我可以重现您的问题,如果 CPack 的源代码未更改,您将不会收到状态消息。您遇到的行为是 CPack 当前的实现方式。
如果您查看 CMake 生成的packagemakefile 规则,您会发现类似以下内容:
# 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
Run Code Online (Sandbox Code Playgroud)
所以你cpack.exe在做的时候打电话make package。为了重现您的问题,我只是将以下行附加到CPackConfig.cmake:
message(STATUS "+++ Test +++")
Run Code Online (Sandbox Code Playgroud)
正如您已经测试过的那样,只有删除STATUS关键字才能看到该消息。所以我测试了直接从命令行调用:
> cpack.exe --verbose --debug --config ./CPackConfig.cmake
Run Code Online (Sandbox Code Playgroud)
但还是没有收到消息。调试时,cpack.exe我可以看到STATUS消息最终确实调用了cmake::UpdateProgress(),并且.ProgressCallbackCPack
我认为修复非常简单,但我不确定您是否愿意更改 CMake 的源代码,或者例如您是否想在CMake 的错误跟踪器中提出问题。
编辑:我已经成功测试了以下消息的代码cpack.cxx扩展STATUS:
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);
}
Run Code Online (Sandbox Code Playgroud)
进而
int main (int argc, char const* const* argv)
{
[...]
cmake cminst;
cminst.SetProgressCallback(cpackProgress, &log);
[...]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4201 次 |
| 最近记录: |