2013-05-06 635 views
0

我有根的CMakeLists.txtCMake的:如何獲得子目錄從根目錄

set(${LIBNAME}_srcs 
File1.cpp 
File2.cpp 
File3.cpp 
File4.cpp 
File5.cpp 
) 
add_subdirectory(A) 

這個變量設置使用源文件,我想將變量添加爲在可執行文件的來源子目錄A

add_executable(${TEST}} 

要做到這一點最乾淨的方法是什麼?而不必在所有源文件中用../創建一個新變量?或者是否有我可以使用的宏?

回答

2

你可以做這樣的事情插入到每個值的絕對路徑${LIBNAME}_srcs:這裏

foreach(${LIBNAME}_src ${${LIBNAME}_srcs}) 
    list(APPEND abs_${LIBNAME}_srcs ${CMAKE_SOURCE_DIR}/${${LIBNAME}_src}) 
endforeach() 

add_executable(${TEST} ${abs_${LIBNAME}_srcs}) 

過早下結論,它看起來像你正在做的事情可能有點不尋常。

通常,add_executable調用將在收集源文件列表的相同位置進行 - 通常位於同一目錄中。

由於你已經命名了源變量${LIBNAME}_srcs,我猜你已經從這些源創建了一個庫。如果是這樣,最好只在測試子目錄中鏈接該庫,而不是將所有庫的源代碼重新編譯爲可執行文件。

喜歡的東西:

add_executable(${TEST} test_main.cpp) 
target_link_libraries(${TEST} ${LIBNAME}) 
0

當我添加源,我做這樣的事情:

set(${LIBNAME}_srcs 
${SRC}/File1.cpp 
${SRC}/File2.cpp 
${SRC}/File3.cpp 
${SRC}/File4.cpp 
${SRC}/File5.cpp 
) 

哪裏${SRC}是使用${CMAKE_SOURCE_DIR}找到源目錄的絕對路徑。

然後,您可以簡單地在子目錄中使用add_executable(${TEST} ${LIBNAME}_srcs)。 CMake會自動將父目錄的範圍導入到子目錄中。