0

静的ライブラリを構築し、それを fortran ファイルのコンパイルに使用しようとしています。私が行った場合:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
add_library(mylib STATIC ${lib_src}/mylib.for)
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
add_executable(bin/out ${PROJECT_SOURCE_DIR}/src/program.f)
target_link_libraries(bin/out mylib)

その後、すべてが機能します (ライブラリはバイナリ ディレクトリ ルートに組み込まれますが、fortran はサブディレクトリにコンパイルされることに注意してください)。しかし、もしそうなら

set(archives ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
add_library(mylib STATIC ${lib_src}/mylib.for)
find_library(mylib NAMES mylib PATHS ${archives})
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
add_executable(bin/out ${PROJECT_SOURCE_DIR}/src/program.f)
target_link_libraries(bin/out mylib)

cmake を実行するとエラーが発生します。

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:   

mylib linked by target "bin/out" in directory /home/chris/project

最後の 2 行を省略した場合、アーカイブ ファイルは、予想どおり libmylib.a として lib サブディレクトリに書き込まれます。私が行った場合

set(archives ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
add_library(mylib STATIC ${lib_src}/mylib.for)
find_library(mylib NAMES mylib PATHS ${archives})
include_directories(${archives})
set(libs ${libs} ${mylib})
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
add_executable(bin/out ${PROJECT_SOURCE_DIR}/src/program.f)
target_link_libraries(bin/out {LIBS})

その後、cmake コマンドは正常に実行されますが、make を実行するとコンパイル エラーが生成されます (set コマンドと target_link_libraries 変数が異なるケースであることはわかっています。変数が同じ場合、上記と同じエラーが発生します)。

${PROJECT_BINARY_DIR}/lib では、 CMake の実行中に作成されたフォルダーをCMake に認識させるにはどうすればよいでしょうか。誰かが私の(おそらく明らかな)間違いを指摘できますか?!

4

1 に答える 1