2016-11-05 68 views
-3

我正在嘗試使用GLOB_RECURSE來指定我的源文件和頭文件。目前,我的靜態庫的CMakeLists.txt是:如何正確使用文件GLOB?

project(LinearSystemLib) 

file(GLOB_RECURSE ${PROJECT_NAME}_headers ${PROJECT_SOURCE_DIR}/*.h) 

file(GLOB_RECURSE ${PROJECT_NAME}_sources ${PROJECT_SOURCE_DIR}/*.cpp) 

add_library(

${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} 

${${PROJECT_NAME}_sources} 

) 

install(

    TARGETS ${PROJECT_NAME} 

    LIBRARY DESTINATION libs 

    ARCHIVE DESTINATION archives 

) 

圖書館目錄如下:

LinearSystemLib 

      CMakeLists.txt 

      source 

       LinearSystemLib.cpp 

      include 

       LinearSystemLib.h 

當我運行命令cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug(build目錄),一切都OK。然而,命令make它顯示以下內容:

/home/felipe/Documents/Dados/SINMEC/Eclipse/LinearSystemLib/source/LinearSystemLib.cpp:1:29: fatal error: LinearSystemLib.h: No such file or directory 

我的CMakeLists錯了嗎?我不想按名稱指定源文件和頭文件。我沒有找到有關glob_recurse的信息。

我可以通過名稱列出源文件和頭文件使其工作。但是,它必須使用glob_recurse或glob來完成。

+3

的可能的複製[如何正確添加包括與CMake的目錄?(http://stackoverflow.com/questions/13703647/how-to-properly-add-include-directories-with-cmake) –

+0

請參閱[CMake/Examples:將遞歸目錄添加到INCLUDE_DIRECTORIES](http://www.vtk.org/Wiki/CMake/Examples#Recursively_add_subdirectories_to_INCLUDE_DIRECTORIES) – Florian

+0

請不要在您的問題標題中添加「已解決」等字樣,因爲這會使它不再是一個問題。如果答案已解決您的問題,請將其標記爲已接受。 –

回答

1

我解決我的問題,這裏就是LinearSystemLib目錄的樣子:

LinearSystemLib 

     CMakeLists.txt 

     source 

      LinearSystemLib.cpp 

     include 

      LinearSystemLib.h 

的的CMakeLists.txt包含:

project(LinearSystemLib) 


#INCLUDE DIRECTORIES 
include_directories(${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/include) 


#SEARCH FOR .CPP AND .H FILES 
file(GLOB ${PROJECT_NAME}_headers ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/include/*.h) 
file(GLOB ${PROJECT_NAME}_sources ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/source/*.cpp) 


#ADD LIBRARY 
add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_sources}) 


#DEFINE OUTPUT LOCATION 
install(
    TARGETS ${PROJECT_NAME} 
    ARCHIVE DESTINATION static_libs 
) 

你實際上並不需要添加.H/.HPP使用GLOB的文件。我這樣做是因爲否則,Visual Studio(或CodeBlocks)不會在項目菜單上創建「頭文件」文件夾。

我沒有正確指定GLOB可以找到文件的路徑。

${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/source/ 
+0

您能詳細說明爲什麼您需要''source'子目錄中額外的'CMakeLists.txt'文件嗎?我似乎不尋常。你可以在主CMakeLists.txt文件中添加一個'include_directories(include)'調用。相對路徑已足夠,CMake會自動在['CMAKE_CURRENT_SOURCE_DIR'](https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_SOURCE_DIR.html)前綴。 – Florian

+0

你好,我在這個項目中有幾個include目錄。我不知道你的建議是否仍然適用。 –

+0

實際上,源子目錄中不需要CMakeLists.txt。你可以只有一個。txt文件在項目目錄中。 –

0

您需要添加

target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}) 

所以正確-I參數添加到您的編譯步驟。使用make VERBOSE=1來查看正在執行的命令。

+0

你好。我試圖包括,但是我得到了同樣的錯誤。你可以分享CMakeLists.txt文件嗎? –

+0

我沒有一個能夠正確構建您的代碼。如果你運行''make VERBOSE = 1'',這應該會幫助你看到正在使用什麼''-I''參數,以及如何調整''target_include_directories''命令,以便它工作。如果不是的話,你需要將代碼發佈到某個地方,以便有人可以查看它,並確切地知道發生了什麼問題。 – Phil