【问题标题】:CMake generated Xcode project fails to find the binary "Products" that are built from XcodeCMake 生成的 Xcode 项目无法找到从 Xcode 构建的二进制“产品”
【发布时间】:2011-12-11 21:03:45
【问题描述】:

我正在尝试使用 CMake 生成的 Xcode 项目。构建时一切看起来都很好,除了 Xcode 找不到构建的二进制文件。下面是我成功构建产品后的截图。我可以在项目源目录中看到它们。但是,请注意 Xcode 显示红色“HelloWorld”,这意味着它找不到产品。

配置:CMake 2.8.6 和 Lion 10.7.2 上的 Xcode 4.2

这是 CMakeLists.txt

project(HelloWorld)

add_executable(${PROJECT_NAME} HelloWorld.cpp)

这是HelloWorld.cpp的源代码

#include <iostream>

int main(){
    std::cout << "HelloWorld!" << std::endl;

    return 0;
}

我尝试直接从Xcode创建一个原始项目,编译后,产品显示黑色而不是红色字体,这意味着Xcode找到了产品。所以我确信这与 CMake Generated Xcode 项目有关。

有人知道吗?如何解决这个问题?

【问题讨论】:

  • 您的目标仅仅是阻止 Xcode 将产品名称呈现为红色,还是还有其他问题?例如,当您在调试器中执行二进制文件时,Xcode 是否找不到二进制文件?
  • 这是我遇到的问题。如果 Xcode 项目是由 CMake 生成的,则 Xcode 无法构建产品。
  • 回答你的第二个问题,是的。二进制文件已构建,我可以在源目录中看到它。但 Xcode 无法执行。
  • 我自己使用您的 CMakeLists.txt 和源代码进行了尝试。产品名称仍然是顽固的红色,但我能够启动程序并在调试器中看到输出就好了。我什至可以设置一个断点并且它起作用了。我能想到的唯一一件事是,当我使用 CMake GUI 程序生成 Xcode 项目时,默认的活动方案是 ZERO_CHECK,它没有 HelloWorld 目标作为依赖项,因此当它是活动方案时,什么都不会构建.我只是将活动方案更改为 HelloWorld,然后它就起作用了。
  • 感谢 sjs。对我来说,构建设置为 ALL_BUILD,在我切换到 HelloWorld 后,Xcode 可以使用断点执行它。看起来唯一剩下的问题是即使生成二进制文件也会出现顽固的红色

标签: c++ xcode macos cmake


【解决方案1】:

xcode 项目文件(我猜,在您的情况下会命名为 HelloWorld.xcproject/project.pbxproject 之类的名称),每个目标的每个构建配置都有 SYMROOT 定义。
您可以将所有 SYMROOT 定义更改为相同的值或删除所有这些(xcode 将默认为“build”)。
项目,如果打开,应该自动重新加载。选择 ALL_BUILD 或 HelloWord,清理并构建。

不确定 cmake 添加 SYMROOT 的方式是否存在问题。
注意:我知道这只是暗示问题可能是什么,而不是解决方案,但还不允许添加 cmets :)

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。对我来说,这是由 Xcode 用来查找产品的搜索路径中的一个额外的“构建”目录引起的。我通过将产品放在 Xcode 期望的位置解决了这个问题,即我添加了额外的“构建”目录。:

    if(CMAKE_GENERATOR STREQUAL Xcode)
        set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/build/Debug)
        set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/build/Release)
        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/build/Debug)
        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/build/Release)
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/build/Debug)
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/build/Release)
    endif()
    

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 2011-07-28
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 2015-01-02
      • 1970-01-01
      相关资源
      最近更新 更多