2015-07-07 10 views
10

In un progetto su cui sviluppo, stiamo utilizzando cmake per compilare il nostro servizio. Attualmente, abbiamo bisogno di ottenere dati per Qt da 3 diverse posizioni e sono curioso di sapere se esiste un modo per eseguire un comando cmake su tre diversi.Multiple Cmake_Prefix_Paths

Quello che attualmente utilizzano:

cmake -G "Visual Studio 12 2013" -DWITH_SERVER=1 -DCMAKE_PREFIX_PATH=C:\Qt\5.5\msvc2013\lib\cmake .. 
cmake -G "Visual Studio 12 2013" -DWITH_SERVER=1 -DCMAKE_PREFIX_PATH=C:\protobuf\src .. 
cmake -G "Visual Studio 12 2013" -DWITH_SERVER=1 -DCMAKE_PREFIX_PATH=C:\protobuf\cmake\build\Release .. 

Abbiamo cercato di passare la stessa bandiera 3 volte e separare i percorsi con : e ;, ma nessuno sembra funzionare come previsto.

+1

Avete bisogno di più voci in "CMAKE_PREFIX_PATH" o vi ho frainteso? Se è così allora usa '-DCMAKE_PREFIX_PATH =" C: \ Qt \ 5.5 \ msvc2013 \ lib \ cmake; C: \ protobuf \ src; C: \ protobuf \ cmake \ build \ Release "' – ixSci

+0

Sì, ho bisogno di avere più voci per il percorso prefisso. Quando l'ho provato prima non sembrava funzionare come previsto, finendo dopo la prima opzione – ZeldaZach

+0

. L'ho appena provato e si stampa come dovrebbe: 'messaggio (" !!!!!! "$ {CMAKE_PREFIX_PATH}) 'L'esecuzione con la stringa di cui sopra produce quanto segue:' !!!!!! C: \ Qt \ 5.5 \ msvc2013 \ lib \ cmakeC: \ protobuf \ srcC: \ protobuf \ c ?? make \ build \ Release' Nota i punti interrogativi nel 3 ° percorso. Qualcosa non va con la stringa: sembra che ci sia un personaggio unicode lì – ixSci

risposta

13

Per fornire più percorsi nella variabile CMAKE_PREFIX_PATH è necessario delimitare ciascuna voce di ; (punto e virgola). Così il vostro comando sarà simile:

cmake -DCMAKE_PREFIX_PATH="C:\Qt\5.5\msvc2013\lib\cmake;C:\protobuf\src;C:\protobuf\c‌​make\build\Release" 

per controllare se tutto va bene con i percorsi previsti è possibile utilizzare il seguente codice nel file cmake:

foreach(path ${CMAKE_PREFIX_PATH}) 
    message("Path: " ${path}) 
endforeach(path) 

Si stamperà ogni percorso fornito.

+0

Funziona come previsto, grazie per il tuo aiuto! – ZeldaZach

+0

Non sembra funzionare in Jenkins 2.60.2 e CMake 3.9.1. – StarShine