1

オプションの QT4 GUI を追加することにした CLI ベースのアプリケーションがあります。私の CMakeLists.txt は次のようになります。

...
add_library(applib ...
add_executable(app-cli ...
target_link_libraries(app-cli applib)
if(QT4_FOUND)
  ...
  include(${QT_USE_FILE})
  add_executable(app-qt ...
  target_link_libraries(app-qt ${QT_LIBRARIES} applib)
endif()

それは機能しますが、「if(QT4_FOUND)」が true と評価されるたびに、「-DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG」が非 qt 対応コードを含むすべてのソース ファイルのコンパイラ呼び出しに追加されることに気付きました。良性ですが、私はそれが不要だと考えています。私が問題を理解している限り、その原因は include(${QT_USE_FILE}) です。これには、私のマシンの /usr/share/cmake/Modules/UseQt4.cmake が含まれます。最初の非コメント行は次のとおりです。

add_definitions(${QT_DEFINITIONS})

私はおそらく次のようなものが欲しいのですが

set_target_properties (app-qt PROPERTIES COMPILE_DEFINITIONS "${QT_DEFINITIONS}")

これについて何かできることはありますか?

4

2 に答える 2

0

簡単な 1 つの解決策は、サブディレクトリにターゲットを作成することです。その結果add_definitions、サブディレクトリで呼び出され、現在のディレクトリには影響しません。

受け入れられない場合は、別の方法で解決できます。コマンドadd_definitionsは、ディレクトリ プロパティを変更します。したがって、リストから定義を簡単に削除できます。この例を試してください:

# setted somewhere
add_definitions(-DMYDEFS) # you don't need this
add_definitions(-DMYBoo)

# get definitions
get_directory_property(new_definitions COMPILE_DEFINITIONS)

# remove unnecessary definitions
list(REMOVE_ITEM new_definitions MYDEFS)

# set new definitions
set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "${new_definitions}")

定義にフォームがある場合、MYDEF=SOMEVALUEこれは機能しないことに注意してください。書き直す必要がありますlist(REMOVE_ITEM ...)

PS私はQtモジュールの使用面を知りません。おそらく、より簡単な解決策または回避策があります(:

于 2013-11-03T07:25:52.733 に答える