2012-09-11 64 views
2

我現在正在用CMake構建一個動態庫,現在我遇到的問題與爲庫添加文件有關。我的項目結構如下:用CMake添加文件

----src 
    | 
    thrid_party---boost_1_50_0----boost 
    |  --- |  ----libs 
    |  --- |  ---- | --- filesystem 
    |  --- |  ---- | --- | ------src 

我的CMakeLists.txt文件位於src目錄,並且是該文件的內容如下:

cmake_minimum_required(VERSION 2.6) 
project (temp) 
#build the third party library 
include_directories(${irisimp_SOURCE_DIR}/../third_party/boost_1_50_0) 
set (boost_path 
${irisimp_SOURCE_DIR}/../third_party/boost_1_50_0/libs) 

set (BOOST_LIST 
${boost_path}/filesystem/src/codecvt_error_category.cpp 
${boost_path}/filesystem/src/operations.cpp 
${boost_path}/filesystem/src/path.cpp 
${boost_path}/filesystem/src/path_traits.cpp 
${boost_path}/filesystem/src/portability.cpp 
${boost_path}/filesystem/src/unique_path.cpp 
${boost_path}/filesystem/src/utf8_codecvt_facet.cpp 
${boost_path}/filesystem/src/windows_file_codecvt.cpp 
${boost_path}/filesystem/src/windows_file_codecvt.hpp 
) 
add_library (boost SHARED ${BOOST_LIST}) 

我有沒有問題運行此腳本,但是,輸出Visual Studio 10項目不包含${boost_path}/filesystem/src文件夾中的所有源文件。實際上只保留了windows_file_codecvt.cpp。因此編譯這個項目將會失敗。我想知道我應該怎麼做才能確保Visual Studio 10項目可以包含所有源文件,如CMakeLists.txt.Thanks中所述!

+1

這一切都很好(除了結構圖中的錯字「thrid」)。我假設列出的Boost.Filesystem文件實際上都存在於您指定的位置。你可以在設置之後嘗試輸出'BOOST_LIST'的內容:'message(「BOOST_LIST:$ {BOOST_LIST}」)',或者你可以獲得'boost'目標的源代碼'get_target_property(BoostSources boost SOURCES)'和輸出:'message(「BoostSources:$ {BoostSources}」)'看看它是否能解決問題。 – Fraser

+0

@Fraser感謝您的建議,它似乎只在我的電腦中失敗,並且如果相同的腳本在另一臺計算機上運行,​​那就沒有問題。這與我的電腦設置有關,我猜。 – feelfree

回答

2

嘗試把分號在路徑之間,像這樣:

set (BOOST_LIST 
    ${boost_path}/filesystem/src/codecvt_error_category.cpp; 
    ${boost_path}/filesystem/src/operations.cpp; 
    ${boost_path}/filesystem/src/path.cpp; 
    ${boost_path}/filesystem/src/path_traits.cpp; 
    ${boost_path}/filesystem/src/portability.cpp; 
    ${boost_path}/filesystem/src/unique_path.cpp; 
    ${boost_path}/filesystem/src/utf8_codecvt_facet.cpp; 
    ${boost_path}/filesystem/src/windows_file_codecvt.cpp; 
    ${boost_path}/filesystem/src/windows_file_codecvt.hpp; 
) 

如果這不起作用,嘗試

add_library(boost SHARED 
    ${boost_path}/filesystem/src/codecvt_error_category.cpp 
    ${boost_path}/filesystem/src/operations.cpp 
    ${boost_path}/filesystem/src/path.cpp 
    ${boost_path}/filesystem/src/path_traits.cpp 
    ... 
    ${boost_path}/filesystem/src/windows_file_codecvt.hpp) 

這可能有助於調試問題所在。

+0

這將是一個評論,但是SO不認爲我值得評論。 –

+0

謝謝,它的工作原理。 – feelfree

+0

嗯,奇怪。無論如何,'BOOST_LIST'應該已經列出。 – arrowd

相關問題