2009-08-25 66 views
1

我正在启动一个多平台(Win Xp,Linux)qt项目。我想用一个彻头彻尾的源码编译的,所以我的目录结构如下:在Qt项目中使用CMake与Gnu时包含问题

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上或使用MinGW生成器在Windows下使用相同的结构和CMakeLists,我会收到编译错误,因为位于构建目录下的qt生成的文件(通过moc和uic)无法在我的子项目中找到我的头文件。一些qt生成的头文件/源文件依赖于我的头文件/源文件,因为我在我的源文件中使用了指向实现的.ui文件中的提升小部件。再次在Visual Studio/NMake下编译好。

作为一种变通方法,我可以用一个在源代码编译它运行罚款或我可以添加对全球的CMakeLists.txt如下:

include_directories(
    mystuff/subprojectA 
    mystuff/subprojectB 
) 

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

回答

2

我有类似的问题,与包括针对源的基础上UNIX(虽然我不使用QT),并在每个进行投射我说:

include_directories(.) 

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

+0

嘿酷适合我!不是完美的答案,而是一个很好的解决方法,谢谢! – 2009-08-26 08:18:23

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") 
+0

不,我不想包含我的moc文件(实际上我已经做过)等等,但是我的moc生成的文件需要包含一些文件(我的子项目),因为我在.ui文件中使用了提升的小部件。所以iain的答案解决了我的问题。 – 2009-11-17 14:13:29