安装cmocka时如何在Mac OS X上处理RPATH问题?

时间:2015-06-07 18:37:37

标签: c macos cmake rpath cmocka

我正在尝试在Mac OSX Yosemite 10.10.3上安装并运行cmocka库进行单元测试,但是我在RPATH设置时遇到了一些问题。

更新

感谢@baf,我可以手动将cmocka.h包含在我的CMakeLists.txt中,如下所示:

set(CMAKE_C_FLAGS_DEBUG "-I/usr/local/include/cmocka.h")

但是,为什么我必须手动完成?

我已经尝试了许多不同的安装方式:

到目前为止我做了什么:

  1. 从这里下载cmocka:here。版本1.0。

  2. tar xvf cmocka-1.0.1.tar.xz

  3. cd cmocka-1.0.1mkdir buildcd build

  4. sudo cmake ..
    我在这里收到这样的消息:

  5.   

    - 配置完成

         

    CMake警告(开发):

         

    未设置策略CMP0042:默认情况下启用MACOSX_RPATH。运行" cmake --help-policy CMP0042"政策细节。使用cmake_policy命令设置策略并禁止显示此警告。

         

    未为以下目标指定MACOSX_RPATH:

         

    cmocka_shared

         

    此警告适用于项目开发人员。使用-Wno-dev来抑制它。

    问题#1:我如何设置rpath以便没有像上面那样的警告?

    1. sudo make

    2. sudo make install

    3. 现在应该安装
    4. cmocka,对吗?

    5. 为我正在使用cmake库的程序运行cmocka

      现在我为我的程序运行cmake,我的主CMakeList.txt文件包含这样的行:

      find_library (CMOCKA cmocka)
      if (NOT CMOCKA)
          message (WARNING "Cmocka library not found.")
      endif (NOT CMOCKA)
      

      但在此阶段警告并未显示,因此我认为find_libarary(CMOCKA cmocka)已在我的计算机上成功找到cmocka

      为我的程序运行make

      在运行make时,我收到如下错误:

      fatal error:<br>
          'cmocka.h' file not found<br>
      #include <cmocka.h>
                ^
      1 error generated.
      

      所以我猜不能找到cmocka ......

      问题2:为什么找不到cmocka库?

      附加说明:

      1. 我试过了

        $ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
        
      2. 但它没有帮助。我想这是Linux的解决方案,而不是Mac。

        1. 我已尝试在RAPTH中通过其官方文档http://www.cmake.org/Wiki/CMake_RPATH_handling在Mac上了解cmakeHow to set the runtime path (-rpath) of an executable with gcc under Mac OSX?。但是我理解得很少,而且我无法为我的问题找到解决方案。

        2. 我尝试使用cmocka安装brew但我得到的结果相同。

        3. 此外,我已经在SO上阅读了很多关于RPATH,链接和cmocka的问题,但我也找不到合适的解决方案。不过,这里是相关主题列表:

        4. 我已经otool -L cmocka了。这就是我得到的:

          error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool: can't open file: cmocka (No such file or directory)
          

1 个答案:

答案 0 :(得分:0)

当我将-I/usr/local/include标志添加到调试标志时,我能够成功编译我的程序(感谢baf):

set(CMAKE_C_FLAGS_DEBUG "-std=gnu99 -Wall -pedantic -g -I/usr/local/include/cmocka.h")