2016-07-09 9 views
0

Ich versuche mein Projektlayout zu verbessern.Wie erstellt man Abhängigkeiten in CMake?

Hier ist (einige) meine CMakeLists.txt

project(Numerical CXX) 

include(cotire) 

cmake_minimum_required(VERSION 3.1) 

set (CMAKE_CXX_STANDARD 14) 

add_executable(hw1 hw1.cpp 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 

add_executable(hw2 hw2.cpp 
    linalg/cholesky.cpp 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 

add_executable(hw3 hw3.cpp 
    linalg/solvers-new.cpp 
    linalg/cholesky.cpp 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 
... 

lu.h umfasst , so alles, was lu auch banded benötigen muss. Dies erfordert Redundanz in meinem Projekt, wie oben gesehen. Gibt es eine Möglichkeit, die ich nicht hinzufügen muss banded.cpp jedes Mal, wenn ich lu.cpp hinzufügen?

+0

Warum reduziert nicht mal zusammenstellen und eine Bibliothek machen? – kfsone

+0

@kfsone: das klingt nach der Art von Dingen, die ich gerne machen würde! Wie würde ich darüber gehen? –

Antwort

1

@ Antwort Werke Amadeus, aber ich denke, eine bessere Antwort, die gemeinsame Dateien zu nehmen und sie in eine Bibliothek verschieben:

project(Numerical CXX) 
include(cotire) 
cmake_minimum_required(VERSION 3.1) 
set (CMAKE_CXX_STANDARD 14) 

add_library(CommonLib STATIC 
    linalg/lu.cpp 
    linalg/banded.cpp 
) 

add_executable(hw1 
    hw1.cpp 
) 

target_link_libraries(hw1 LINK_PUBLIC 
    CommonLib 
) 

add_executable(hw2 
    hw2.cpp 
    linalg/cholesky.cpp 
) 

target_link_libraries(hw2 LINK_PUBLIC 
    CommonLib 
) 

add_executable(hw3 
    hw3.cpp 
    linalg/solvers-new.cpp 
    linalg/cholesky.cpp 
) 

target_link_libraries(hw3 LINK_PUBLIC 
    CommonLib 
) 
+0

Wie entscheide ich, was in die Bibliothek kommt? –

+2

@krey Was auch immer du unter all deinen Modulen wiederverwendst - es gibt keinen Grund, dass du nicht einfach alles, was du unter linalg verwenden willst, hineinlegst. Der Verknüpfungsprozess extrahiert nur die erforderlichen Funktionen in die resultierende Binärdatei. – kfsone