に私は自分のプロジェクトをリンクするcmakeのを使用しようとしています。重複コンパイルフラグがCMAKE_CXX_FLAGS
は、私はそれが私にmypack_definitions
、mypack_flags
、mypack_include_dirs
、およびmypack_libraries
を与える、パッケージmypack
を見つける必要があります。ここでmypack_flags
には、mypackをリンクするための関連フラグが含まれています。私はCMAKE_CXX_FLAGS
にmypack_flags
を追加します。
以下CMakeLists.txtをご覧ください。
cmake_minimum_required(VERSION 2.8)
project(QMCLIB C CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fopenmp")
find_package(mypack REQUIRED)
add_executable(QMC codeA.cpp codeB.cpp)
add_definitions(${mypack_definitions})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${mypack_flags}")
target_link_libraries(QMC ${mypack_libraries})
target_include_directories(QMC PUBLIC ${mypack_include_dirs})
しかし-fopenmp
を含んで、システムに依存mypack_flags
かもしれないかどうか、それは-fopenmp
が含まれている場合、私のを持つことになります。私はそれを削除した場合、私はmypack_flags
が-fopenmp
が含まれていない場合には、その後、私はCMAKE_CXX_FLAGSには-fopenmp
を持っていないだろう、
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fopenmp")
を-fopenmp
を削除することはできません。
強制的に使用する方法はありますか?-fopenmp
?それとも2つ持っているのですか?-fopenmp
?提案ありがとう。
==============================================
function(removeDuplicateSubstring stringIn stringOut)
separate_arguments(stringIn)
list(REMOVE_DUPLICATES stringIn)
string(REPLACE ";" " " stringIn "${stringIn}")
set(${stringOut} "${stringIn}" PARENT_SCOPE)
endfunction()
:========================ロバート・プレボーへ
おかげで、ここでの重複した部分文字列を除去するための一般的な機能でありますCMakeのは一つだけ-fopenmp
を含めるようにする方法があり
removeDuplicateSubstring(${CMAKE_CXX_FLAGS} CMAKE_CXX_FLAGS)
どうもありがとう、私はあなたのアイデアが続く関数を記述します。文字列中の重複した部分文字列を削除します。 –