Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Compiler- und IDE-Forum ::  Umstieg auf cmake..     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
flownfluid
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.03.2006
Beiträge: 51
Beitrag flownfluid Mitglied 13:52:57 21.10.2009   Titel:   Umstieg auf cmake..            Zitieren

hallo zusammen,

ich habe nun angefangen meine Makefile durch cmake zu generieren und muss sagen bis jetzt klappte alles wunderbar. doch nun habe ich doch eine frage:

ich generier viel statisch libs wie z.b.
Code:
SET(SRC_Lib1 l1.cpp l2.cpp)
INCLUDE_DIRECTORIES(${LIB1_INCLUDE_DIR})
ADD_LIBRARY(Lib1 STATIC ${SRC_Lib1})


nun möchte ich alle statischen libs noch in eine shared lib zusammenfassen und irgendwie finde ich dazu keine passende idee. kann mir da jemand weiterhelfen?

wäre es möglich in einem cmakefile alle anderen cmake files zu "includen" damit man dort die Variabeln kennt:
ca so:
Code:
add_subdirectory(lib1)
add_subdirectory(lib2)
SET(SRC_SharedLib ${SRC_Lib1} ${SRC_Lib2})
INCLUDE_DIRECTORIES(${LIB1_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${LIB2_INCLUDE_DIR})
ADD_LIBRARY(SharedLib SHARED ${SRC_Lib1})


vielen dank für eure hilfe
DrGreenthumb
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.10.2001
Beiträge: 4638
Beitrag DrGreenthumb Mitglied 20:35:54 21.10.2009   Titel:              Zitieren

ja, aber du bräuchtest die quellen und die includes nicht.

add_subdirectory(lib1)
add_subdirectory(lib2)
add_library (sharedlib SHARED)
target_link_libraries (sharedlib lib1 lib2)

_________________
main(k){for(k=0;k<125;++k)putchar((k+1)%25? ("[k<qFUF>XB]X=9V=hm9FC"[k/6]-52)&1<<k%6?64:32:10);}
flownfluid
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.03.2006
Beiträge: 51
Beitrag flownfluid Mitglied 06:53:44 22.10.2009   Titel:              Zitieren

Vielen Dank aber wenn ich das so mache meldet mir cmake folgendes:

Code:
You called ADD_LIBRARY for library sharedlib without any source files.


hänge mal meine Verzeichnissstrucktur noch an...

./project/CMakeLists.txt --> für die Sharedlibrary
./project/lib1/CmakeLists.txt --> für die static lib1
./project/lib1/CmakeLists.txt --> für die static lib2
usw...
flownfluid
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.03.2006
Beiträge: 51
Beitrag flownfluid Mitglied 11:55:48 22.10.2009   Titel:              Zitieren

Ich möchte einfach einen Weg, dieses Problem zu lösen ohne das ich bei der shared lib nocheinmal alle Sourcen angeben muss.

Ziel:
Wenn z.b. lib1 ändert, muss ich nur das CMakeLists.txt file der lib1 anpassen und das von der sharedlib bleibt gleich.

Es führen da sicher mehrere zum Ziel und so muss es nicht zwangsweise diesen sein bin da offen für weiter Möglichkeiten :D

Danke
DrGreenthumb
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.10.2001
Beiträge: 4638
Beitrag DrGreenthumb Mitglied 18:56:46 22.10.2009   Titel:              Zitieren

Zur Not könnte man eine leere dummy.cpp bei der shared-lib mit angeben (die am besten vorher irgendwie mit cmake generieren).

Alternativ die static libs nicht mit target_link_libraries dazugeben sondern mit add_library (... SHARED ${CMAKE_CURRENT_BINARY_DIR}/liblib1.a ...) (evtl. gibt es noch eine bessere Möglichkeit an den Pfad der static lib zu kommen.
Dann muss aber cmake auch noch irgendwie gesagt werden um welche Sprache es sich bei der shared lib handelt.

_________________
main(k){for(k=0;k<125;++k)putchar((k+1)%25? ("[k<qFUF>XB]X=9V=hm9FC"[k/6]-52)&1<<k%6?64:32:10);}
flownfluid
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.03.2006
Beiträge: 51
Beitrag flownfluid Mitglied 13:11:08 23.10.2009   Titel:              Zitieren

irgendwie blicke ich da nicht mehr durch, aber ich denke viel fehlt nicht mehr ;-)

mein CMakeLists.txt:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cmake_minimum_required(VERSION 2.6)
 
project(shared)
 
add_subdirectory(lib1)
add_subdirectory(lib2)
 
 
 
ADD_LIBRARY(mySharedLib SHARED ./lib1/liblib1.a
                               ./lib2/liblib2.a)
 
#ADD_LIBRARY(mySharedLib SHARED)
           
SET_TARGET_PROPERTIES(mySharedLib PROPERTIES LINKER_LANGUAGE Cxx)
 
#target_link_libraries(mySharedLib
#                      GLOBAL
#                      AppComponent)


so mekert cmake folgendes:
Code:
Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_Cxx_CREATE_SHARED_LIBRARY


Kann mir jemand erklären wie ich diese Variable setzen muss? Hab leider nichts nützliches im netz gefunden. und dann hoffe ich das es dann funktionieren wird.
Mr. N
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.12.2001
Beiträge: 4328
Beitrag Mr. N Mitglied 13:19:10 23.10.2009   Titel:              Zitieren

flownfluid schrieb:

Code:
ADD_LIBRARY(mySharedLib SHARED ./lib1/liblib1.a
                               ./lib2/liblib2.a)
 
#ADD_LIBRARY(mySharedLib SHARED)
           
SET_TARGET_PROPERTIES(mySharedLib PROPERTIES LINKER_LANGUAGE Cxx)



Was soll das werden, wenn es fertig ist?

1. Du kannst keine Static Archives zu einer Shared Library zusammenlinken, zumindest nicht ohne spezielle Vorkehrungen zu treffen.
2. Setzt man normalerweise nicht die LINKER_LANGUAGE Property, und wenn doch, dann auf CXX und nicht Cxx.

Mach doch folgendes:

Code:
ADD_LIBRARY(mySharedLib SHARED ${LISTE_ALLER_CPP_DATEIEN})

_________________
ray says: "when you're dealing with programmers you are often dealing with people who voluntarily use 1970s terminals. they cannot be reasoned with"

burrito kitteh esplains teh monads fur u
flownfluid
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.03.2006
Beiträge: 51
Beitrag flownfluid Mitglied 13:33:25 23.10.2009   Titel:              Zitieren

...danke für deine Antwort....

aber genau um die "liste aller cpp-files" gehts hier genau...

Ich weiss nicht wie ich die machen kann ohne doppelt zu schreiben.

Das heisst ich erstelle die statischen Libs lib1 und lib2.
und nun möchte ich noch eine sharedlib kreieren, wo beide "Sachen drin" sind.

Aber nun möchte ich gerne die Sourcen nur im cmakefile der lib1 und lib2 haben.
Sprich wenn in lib1 ein File dazukommt, ändere ich das cmake File der lib1 und das muss reichen, sprich das cmakefile der Sharedlib sollte nicht geändert werden.

Weiss du was ich meine?!?
th-thielemann.de
Unregistrierter




Beitrag th-thielemann.de Unregistrierter 21:17:34 12.01.2018   Titel:              Zitieren

Tipp: Erstelle Listen der Source-Files. Dann erstellst Du aus diesen Listen die jeweiligen Bibliotheken:

Code:
set(SRC1 file11.cpp file12.cpp file13.cpp)
add_library(lib1 STATIC ${SRC1})
 
set(SRCA fileAA.cpp fileAB.cpp fileAC.cpp)
add_library(libA STATIC ${SRCA})
 
add_library(libBIG SHARED ${SRC1} ${SRCA})
th-thielemann.de
Unregistrierter




Beitrag th-thielemann.de Unregistrierter 21:18:54 12.01.2018   Titel:              Zitieren

PS: Mehr cmake-Tipps gibt es hier www.th-thielemann.de
C++ Forum :: Compiler- und IDE-Forum ::  Umstieg auf cmake..   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.