1

我正在启动一个多平台(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
)

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

4

2 回答 2

2

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

include_directories( . )

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

于 2009-08-25T16:52:22.057 回答
1

在我正在处理的项目中,我使用此语句来处理 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")
于 2009-11-16T21:46:11.317 回答