2015-04-09 18 views
10

Sto costruendo la mia libreria statica utilizzando object libraries come illustrato utilizzando CMake 3.1.3.cmake - estrazione di file pdb dalle librerie di oggetti

devo

ADD_SUBDIRECTORY(A) 
ADD_SUBDIRECTORY(B) 
.... 
ADD_LIBRARY(mylib STATIC ${SOURCES} 
        $<TARGET_OBJECTS:A> 
        $<TARGET_OBJECTS:B>) 
SET_TARGET_PROPERTIES(mylib PROPERTIES COMPILE_PDB_NAME mylib COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR}) 

Ora, il mio problema è un genera vc120.pdb in di una sottodirectory CMake. B genera il proprio vc120.pdb nella sottodirectory CMake di B. E mylib genera mylib.pdb nella cartella cmake binaria principale.

Voglio solo una libreria statica e un file pdb. Voglio solo mylib e mylib.pdb.

Come posso unire tutti i vc120.pdbs in mylib.pdb o idealmente generare solo un file pdb?

risposta

1

sono riuscito a contattare la gente a Kitware (proprietario CMake).

Hanno detto,

"Impostare la COMPILE_PDB_ * proprietà di A, B, e mylib tutto per puntare allo stesso posto. Librerie di oggetti sono costruiti in modo indipendente e non sanno cosa li (o se più consumerà obiettivi li consumano), quindi devono essere configurati individualmente. "

Così, all'interno Un & B, fare

add_library(A OBJECT a.c) 
set_target_properties(A PROPERTIES 
    COMPILE_PDB_NAME "mylib" 
    COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" 
) 
+0

Utilizzando questo approccio ha implicazioni per il parallelo costruisce. Vedi http://zeuxcg.org/2010/11/22/z7-everything-old-is-new-again/ – sakra

3

Questa non è una risposta diretta alla tua domanda, ma una soluzione alternativa che potresti voler prendere in considerazione.

Con le librerie statiche, è preferibile utilizzare /Z7 per la generazione di informazioni di debug. Quando si utilizza /Z7 il compilatore non produce un file .PDB, ma incorpora le informazioni di debug direttamente nei file oggetto generati.

Quando questi file oggetto vengono quindi collegati come libreria statica, lib.exe copierà le informazioni di debug da tutti i file oggetto nel file .lib risultante. Non è necessario distribuire un file .pdb con il file .lib.

A differenza di link.exe, che viene utilizzato da CMake per produrre una DLL o ed EXE, lib.exe non ha un'opzione per l'output di un file .PDB.

Tramite CMake è possibile impostare le opzioni richieste nel modo seguente. Per l'uso libreria di oggetti:

add_library(A OBJECT lib2.cpp) 
set_target_properties(A PROPERTIES COMPILE_OPTIONS "/Z7") 

per produrre la libreria statica finale, uso:

add_library(mylib STATIC main.cpp $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>) 
set_target_properties(mylib PROPERTIES COMPILE_OPTIONS "/Z7") 
Problemi correlati