【问题标题】:How to add a 'non-built' file to a project with C-Make如何使用 C-Make 将“未构建”文件添加到项目中
【发布时间】:2014-11-26 13:55:31
【问题描述】:

我已经搜索了几个小时,但找不到解决方案,所以问。

我有一个项目解决方案,其中包括大约 10 个项目。但我面临一个依赖问题。我的一个项目生成 moc 文件(由 Cmake 的“QT4_WRAP_CPP”宏生成的 QT moc 文件),我想在另一个项目中使用这个 moc 文件。现在,在运行 cmake 脚本并获得解决方案之后,我构建了所有项目,并且需要由先前项目生成的那些 moc 文件的项目抱怨链接错误(正确的,因为我没有在它的 c-make 中指向任何文件ADD_EXECUTABLE 部分中的脚本)。

我的问题是:有没有办法在 Cmake 中将“尚未构建但将”文件添加到项目中以在编写 cmake 脚本的同时指向它?

这里是项目cmake脚本的相关部分:

//假设 X 项目(也在此解决方案中并在 Y 项目之前构建)生成一个名为“moc_X.cxx”的 moc 文件

SET(Y_WORK_STATION_UI_HEADER YWorkStation.h
        YSignInWidget.h
        YConfigurationWidget.h)

     QT4_WRAP_CPP(MOCSrcs ${Y_WORK_STATION_UI_HEADER})

ADD_EXECUTABLE(${PROJECT_NAME}
        main.cpp
        .
        .
        .
        ${MOCSrcs}
        %---------------->and here something like moc_X.cxx ?
    }

希望它足够清楚。提前致谢。

【问题讨论】:

    标签: qt cmake moc


    【解决方案1】:

    如果文件是由 CMake 理解的东西生成的(即,通过同一个 CMakeList 中的自定义命令),您只需列出它,CMake 将自行获取依赖项。对于其他情况,您可以在源文件上设置一个源文件属性GENERATED,以指示它将在构建期间生成:

    add_executable(${PROJECT_NAME}
            main.cpp
            .
            .
            .
            ${MOCSrcs}
            moc_X.cxx ?
        )
    
    set_property(SOURCE moc_X.cxx PROPERTY GENERATED TRUE)
    

    【讨论】:

    • 是的,谢谢 Angew,这家酒店正是我想要的。有效。再次感谢您节省了我的时间;)
    • 不要这样做。您正在处理实现细节。
    • @steveire 需要详细说明吗?实施细节是什么?
    • moc_foo.cxx 创建位置的详细信息。例如,AUTORCC 生成的 qrc 文件在 CMake 3.1 与 3.0 的不同位置创建此问题后:stackoverflow.com/questions/23041356/…
    • 所以,请不要向人们推荐依赖实现细节:)。
    【解决方案2】:

    您似乎做错了几件事。

    开始:

    “另一个项目”是什么意思?你真的是指“另一个目标”吗?

    为什么一个项目使用另一个项目的 moc 文件?它是否也在使用该项目的源文件?为什么?

    如果这是您的目标,为什么不使用静态(或其他)库?如果出于某种原因使用其他项目的源文件是有意义的(我想创建一个单元测试),那么您可能应该重新 moc 文件,而不是尝试从另一个实现细节位置获取它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2013-08-02
      相关资源
      最近更新 更多