2012-11-04 14 views
8

Sono newbie con CMake. L'ho provato su Linux per un programma che sto realizzando. Questo programma utilizza (POSIX Thread lib), quindi nel mio CMakeList, ho aggiunto:CMake: <pthread.h> non trovato in Windows

find_package(Threads) 

Funziona su Distribs Linux (Arch, Mint, Ubuntu, ...), ma ora, sto cercando in Windows32 (Visual Studio 9 2008), e ricevo questo messaggio durante la generazione:

-- Looking for include file pthread.h - not found 

(e quando compilo file di progetto in uscita, pthread.h è infatti non trovato).

Su Windows, considerando "C: \ pthread" come il mio elenco pthread, ho definito nel percorso:

  • "C: \ pthread \ include" (in cui risiede il famoso "pthread.h")
  • "C: \ pthread \" (nel caso in cui CMake cerca un "include" da qualche parte)

Ma ancora ottengo lo stesso errore (cache anche dopo cancellato). So che potrei "manualmente" aggiungi Pthread nel mio progetto, o definire alcune costanti in CMakeList.txt, ma pensa che non è il principio di CMake: ho potuto utilizzare lo stesso "CMakeList.txt" su tutti i sistemi, giusto? Quindi, come posso dire a CMake "Hey! Guarda qui! Pthread è in questa directory!". Forse cmake non sembra in PATH, ma in un'altra variabile d'ambiente, ma non ho trovato queste informazioni.

Grazie per la lettura.

EDIT: Non so se fa la differenza, ma il mio progetto è un progetto C++ (non C)

+0

Poiché non esiste uno standard percorsi per includere e file di libreria su Windows Spesso CMake deve essere aiutato a lungo quando si esegue cmake-gui. Una seconda opzione è che molti cercatori cercano nelle variabili di ambiente. Ad esempio, per trovare ITK sull'installazione di Windows, ho ITK_DIR impostato nella sessione cmd.exe da cui ho avviato cmake-gui. Lo stesso vale per molti pacchetti. Inoltre ci sono opzioni per find_package che puoi usare per aiutare a controllare dove CMake cerca di trovare i tuoi pacchetti che possono essere di aiuto. – drescherjm

+0

Guardando il codice per FindThreads in CMake 2.8.10 sembra che su Windows verrà utilizzato per default i thread di Windows. – drescherjm

+0

Non l'ho provato. Verifica se CMAKE_USE_PTHREADS_INIT è impostato o solo CMAKE_USE_WIN32_THREADS_INIT. – drescherjm

risposta

0

Per quanto ne so, Pthread non è supportato nativamente su piattaforma Windows. A meno che non si utilizza qualcosa come

win services for unix

di Windows ha solo thread Win32.

Tuttavia, questo è un progetto che prevede pthreads sulle finestre

pthreads on win32

+1

Sì, e l'ho messo in "C: \ pthread \" – Neozaru

+0

err okay pensavo che stavi parlando del pacchetto pthread di Linux che hai copiato qui. – fayyazkl

+3

No, ho ottenuto pthreads per win32, con intestazioni e pacchetti precompilati. Ma CMake non lo trova – Neozaru

1

A quanto pare il CMAKE_USE_WIN32_THREADS_INIT è utile in un contesto di tutte le piattaforme. Questa variabile viene generata o inizializzato su invocazione findPackage (discussioni), idealmente gestisce il collegamento problemi su tutte le piattaforme in libreria di thread caso è necessario essere collegati con eseguibile. Fondamentalmente genera il nome appropriato della libreria di thread su piattaforme unix simili alla piattaforma ed è vuoto sulla piattaforma come windows dove non è richiesta la libreria di threading esplicita per il collegamento. Riferimento: CMake findThreads https://cmake.org/cmake/help/v3.0/module/FindThreads.html?highlight=threads

+0

Ho controllato il collegamento, ma cosa succede ora? Puoi spiegare un po 'più in dettaglio passo dopo passo? –

2

Quello che ho fatto, ho modificato il file cmake:

option(CMAKE_USE_WIN32_THREADS_INIT "using WIN32 threads" ON) 

e

option(gtest_disable_pthreads "Disable uses of pthreads in gtest." ON) 

(sto usando test di google)

Problemi correlati