我正在寫它具有以下結構更改cmake的目錄
project/ (root)
libraries/ (contains (precompiled) libraries
src/
code/ (contains a set of fortran files)
我的CMakeLists.txt文件正在project/
一個項目cmake的文件,有效地只是
cmake_minimum_required(VERSION 2.6)
enable_language(Fortran)
project(project1)
set(projsrc src/code)
set(libdir lib/)
find_library(PROJ_LIBRARY pr10 PATHS ${libdir})
add_executable (sc1 sc1.f90)
target_link_libraries(sc1 ${PROJ_LIBRARY})
這將創建我的二進制文件與源代碼在同一個文件夾中,當我真的想要它在上面的級別(即在src
文件夾 - 這個結構將被改變,所以我們最終有一個bin
文件夾),但還沒有制定出如何做它。
一些關於SO的解釋說你必須在每個文件夾中都有一個CMakeLists.txt文件 - 這是正確的嗎?是否可以設置環境變量或使用CMake變量(例如)。從某些答案來看,他們發佈的解決方案是否是特定於C++的(因爲這是CMake最常用的語言),這一點也不是很清楚。
編輯
我發現我可以把它改成我想通過稍微修改它的行爲:
cmake_minimum_required(VERSION 2.6)
enable_language(Fortran)
project(project1)
set(projsrc src/code)
set(libdir lib/)
find_library(PROJ_LIBRARY pr10 PATHS ${libdir})
add_executable (src/sc1 ${projsrc}/sc1.f90)
target_link_libraries(src/sc1 ${PROJ_LIBRARY})
然而,這並不能解釋爲什麼我行爲是不同的根據下面的arrowdodger,它應該如何。我還在努力研究如何顯示環境變量的值;我已經嘗試了以下,但沒有運氣:
message(${RUNTIME_OUTPUT_DIRECTORY})
message($ENV{RUNTIME_OUTPUT_DIRECTORY})
message(${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
message($ENV{CMAKE_RUNTIME_OUTPUT_DIRECTORY})
小心你的「bin」目錄的想法。這不是現代建築的工作方式,原因很多。您可能需要「源代碼構建」,請參閱此處:http://stackoverflow.com/a/12237398/587407 – Offirmo
@Offirmo - 嗯,我使用的所有科學軟件似乎都有一個「src」和「 bin'dir結構 - 這個想法有什麼問題?任何進一步的閱讀你可以指向我? – ChrisW
例如,如果您想使用不同的編譯器(我這樣做)或不同的選項(我也這樣做)製作相同的程序,那麼如何讓它們在bin目錄中共存?你將不得不復制整個結構。使用「源外」構建,您可以擁有儘可能多的「箱子」,您可以共享相同的來源。 cmake提倡它:http://www.cmake.org/Wiki/CMake_FAQ#Out-of-source_build_trees,例如,Wt庫的構建方式如下:http://www.webtoolkit。EU /重量/ DOC /參考/ HTML/InstallationUnix.html#建立。 – Offirmo