我在尝试构建一个静态库并将其用于编译一个 fortran文件。如果我做的:在CMake中查找目录
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行,然后存档文件并获得 写入到lib子目录,作为libmylib.a预期。如果我做
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 变量不同的情况 - 的东西我不明白 是一个为什么这只在make运行时失败,而不是cmake;如果 变量是相同的大小写,那么我得到与上面相同的错误)。
那么,我怎样才能让CMake识别在CMake运行期间创建的我的${PROJECT_BINARY_DIR}/lib
文件夹?有人能指出我的 (可能很明显)的错误吗?!