2

私は Windows で cmake 2.8.11 を使用し、Qt プロジェクトで mingw-w64 の makefile を生成しています。プリコンパイル済みヘッダーを使用したかったのです。そのためには、コンパイラへの引数を再作成する必要があります。結局、私はハードコードされたカスタムコマンドで立ち往生しています:

foreach(dir ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS})
    set(MY_INCLUDE_ARGS "${MY_INCLUDE_ARGS}" "-I${dir}")
endforeach()

add_custom_command(
    PRE_BUILD
    OUTPUT all.h.gch
    COMMAND
    ${CMAKE_CXX_COMPILER} -x c++-header -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -std=c++11 -g
    -c "${CMAKE_CURRENT_SOURCE_DIR}/all_real.h" -o "${CMAKE_CURRENT_SOURCE_DIR}/all.h.gch"
    ${MY_INCLUDE_ARGS}
    DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/all_real.h"
    IMPLICIT_DEPENDS CXX "${CMAKE_CURRENT_SOURCE_DIR}/all_real.h"
    COMMENT "Generating precompiled headers"
)

それはある程度機能しますが、いくつかの変数を使用してそれらすべての -D を埋めることができるはずであり、for ループを必要としたり、Qt モジュールを明示的にリストしたりする必要はありません。

ターゲットとディレクトリのプロパティを読み込もうとしましたが、空です!

find_package(Qt5Core)
find_package(Qt5Gui)
find_package(Qt5Widgets)
...
add_executable(app ${CPP_FILES} ${H_FILES} ${UI_FILES})
target_link_libraries(app Qt5::Core Qt5::Gui Qt5::Widgets)
qt5_wrap_ui(ui_main_window.h main_window.ui)
qt5_add_resources(app ${QRC_FILES})

GET_PROPERTY(dat1 DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
get_target_property(dat2 app INCLUDE_DIRECTORIES)
MESSAGE(STATUS "!!!! ${dat1}") # Empty!
MESSAGE(STATUS "!!!! ${dat2}") # Empty!

また、CMAKE_CXX_FLAGS には、set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -H") によって自分で配置したもののみが含まれており、引用符とともに展開されるため、add_custom_command では実際には使用できません。

助けてください。

4

0 に答える 0