【问题标题】:Include problems when using CMake with Gnu on Qt project在 Qt 项目中将 CMake 与 Gnu 一起使用时包含问题
【发布时间】:2010-11-22 15:21:39
【问题描述】:

我正在启动一个多平台(Win Xp、Linux)qt 项目。我想使用源外构建,所以我的目录结构如下:

project/
  CMakeLists.txt   (global CMake file, includes other CMakeLists)
  build/           (my build directory)
  libA/
    CMakeLists.txt
  mystuff/
    subprojectA/
      CMakeLists.txt
    subprojectB/
      CMakeLists.txt

因此,当我在 Windows 上使用 Visual Studio 生成器时,一切正常。 如果我在 Linux 或 Windows 下使用 MinGW 生成器使用相同的结构和 CMakeLists,则会出现编译错误,因为构建目录下的 qt 生成文件(通过 moc 和 uic)无法在我的子项目中找到我的头文件。一些 qt 生成的头文件/源文件依赖于我的头文件/源文件,因为我在 .ui 文件中使用提升的小部件,这些小部件指向我的源代码中的实现。再次在 Visual Studio / NMake 下一切编译正常。

作为一种解决方法,我可以使用运行良好的源代码构建,或者我可以在全局 CMakeLists.txt 中添加以下内容:

include_directories(
  mystuff/subprojectA
  mystuff/subprojectB
)

但是什么是正确的解决方案?非常感谢!!

【问题讨论】:

    标签: c++ qt mingw cmake gnu


    【解决方案1】:

    我有一个类似的问题,包含在 unix 上的源代码构建(虽然我没有使用 QT),并且在每个受影响的项目中我都添加了:

    include_directories( . )
    

    不是最优雅的,但我为我工作。

    【讨论】:

    • 嘿,这对我有用!不是完美的答案,而是一个很好的解决方法,谢谢!
    【解决方案2】:

    在我正在处理的项目中,我使用此语句来处理 CMakeLists.txt 中的包含:

     include_directories(${CMAKE_CURRENT_BINARY_DIR} ${QT_INCLUDES} ${OPENSSL_INCLUDE_DIR})
    

    关键字是 ${CMAKE_CURRENT_BINARY_DIR},希望对您有所帮助。

    旁注,如果您使用启用了异常的 gcc 4.4.x,您可能希望使用它,这样它就不会链接到 windows 上的 libgcc_s_sjlj-1.dll。

     SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-static-libgcc")
    

    【讨论】:

    • 不,我不想包含我的 moc 文件(我确实已经这样做了)等等,但是我的 moc 生成的文件需要自己包含一些文件(我的子项目),因为我使用.ui 文件中提升的小部件。所以 iain 的回答解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多