2013-07-11 26 views
1

我開始用下面的目錄結構:不能編譯可執行文件的CMake

project 
     exec 
      executable.exe 
     lib 
      src 
      include 
     config 
      <cmake-generated config file> 

我通過在lib/src文件夾使用CMakefile創造了lib/src文件夾中的庫。該exe會編譯。

然後,我把我的CMakeFile高達/lib,確保到源文件路徑更改爲/src/* 現在,當我嘗試編譯,我所有的庫編譯和鏈接,但是當我試圖將可執行鏈接,我得到/usr/bin/ld: cannot find -lconfig

有沒有人有任何想法爲什麼發生這種情況或如何解決它?

下面是我的一些代碼:

./CMakeLists.txt: 
    include_directories(config) 
    SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) 
    SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 
    ADD_SUBDIRECTORY(libs) #library sources 
    ADD_SUBDIRECTORY(exec) #executable sources 
      CONFIGURE_FILE(${core_SOURCE_DIR}/config/config.h.in 
        ${core_SOURCE_DIR}/config/config.h) 

./libs/CMakeLists.txt: 
    file(GLOB src ...) 
    file(GLOB header ...) 
    add_library(lib ${src} ${header}) 


./exec/CMakeLists: 
     add_executable(executable executable.cpp) 
     link_directories(${core_SOURCE_DIR}/lib) #not sure if this is required 
     target_link_libraries(executable ${lots_of_libs}) 

lots_of_libs每個庫可以發現作爲.a文件中lib目錄

+0

燦你顯示你的CMakeLists.txt的內容? – Antonio

+0

是的。我有很多庫,所以我會盡量保持簡短。 –

+0

你可以嘗試看看會發生什麼,如果你刪除了語句SET(EXECUTABLE_OUTPUT_PATH $ {PROJECT_BINARY_DIR}/bin)'和SET(LIBRARY_OUTPUT_PATH $ {PROJECT_BINARY_DIR}/lib)' – Antonio

回答

1

的一個問題,可能不是risolutive,是這樣的:

link_directories(${core_SOURCE_DIR}/lib) #not sure if this is required 

應該是:

link_directories(${PROJECT_BINARY_DIR}/lib) 

或:

link_directories(${LIBRARY_OUTPUT_PATH}) 

無論如何,通常你會不會需要的路徑添加到您的link_directories到在項目內建立一個庫,即使您指定一個不同的LIBRARY_OUTPUT_PATH

+0

我嘗試了兩種方式,但我仍然得到相同的錯誤。 –

+0

您無需爲您從相同CMake項目構建的目標指定'link_directories'。 CMake非常聰明,可以自行解決這個問題。 – ComicSansMS

+0

@ComicSansMS你是對的,但這並沒有改變這條線路中有錯誤路徑的事實。無論如何,我會編輯我的答案。 – Antonio