次の構造を持つプロジェクトの cmake ファイルを作成しています
project/ (root)
libraries/ (contains (precompiled) libraries
src/
code/ (contains a set of fortran files)
私のCMakeLists.txtファイルは現在入っていてproject/
、事実上
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 変数を使用することは可能ですか (例: http://cmake.org/cmake/help/v2.8.8/cmake.html#command:set )。彼らが投稿したソリューションが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})