我想用cmake來鏈接我的項目。CMAKE_CXX_FLAGS中重複的編譯標誌
我需要找到一個包mypack
,它會給我mypack_definitions
,mypack_flags
,mypack_include_dirs
和mypack_libraries
。這裏mypack_flags
包含鏈接mypack的相關標誌。我會將mypack_flags
添加到CMAKE_CXX_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})
但是依賴於系統,mypack_flags
威力或不含-fopenmp
,當它含有-fopenmp
,我CMAKE_CXX_FLAGS
將有兩個-fopenmp
。我不能在
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fopenmp")
如果我刪除它刪除-fopenmp
,當mypack_flags
不包含-fopenmp
,那麼我將在CMAKE_CXX_FLAGS沒有-fopenmp
。
有沒有辦法強制cmake只使用一個-fopenmp
?或者可以有兩個-fopenmp
?謝謝你的建議。
============================================== ========================
感謝羅伯特·普雷沃,這裏是一個通用函數刪除重複的字符串:
function(removeDuplicateSubstring stringIn stringOut)
separate_arguments(stringIn)
list(REMOVE_DUPLICATES stringIn)
string(REPLACE ";" " " stringIn "${stringIn}")
set(${stringOut} "${stringIn}" PARENT_SCOPE)
endfunction()
我們可以通過調用這個函數:
removeDuplicateSubstring(${CMAKE_CXX_FLAGS} CMAKE_CXX_FLAGS)
非常感謝,我寫了一個功能,然後你的想法。它刪除字符串中的重複子字符串。 –