Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CMake中查找目录_Cmake - Fatal编程技术网

在CMake中查找目录

在CMake中查找目录,cmake,Cmake,我正在尝试构建一个静态库,并将其用于编译 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)

我正在尝试构建一个静态库,并将其用于编译 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
如果我省略了最后两行,那么归档文件就会 按预期将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命令和目标链接库 变量是不同的情况-我不明白的事情之一 这就是为什么只有在运行make而不是cmake时才会失败;如果 变量是相同的情况,然后我得到与上面相同的错误)

那么,如何让CMake识别我的
${PROJECT\u BINARY\u DIR}/lib
在CMake运行期间创建的文件夹?有人能指出我的名字吗
(可能很明显)错了

您不应在某个目标上使用
find_library
,请删除以下行:

find_library(mylib NAMES mylib PATHS ${archives})
CMake已经知道
mylib
库,因为它是它的目标之一,调用
find\u library
会隐藏
mylib
变量


您可以保持对
target\u link\u库的调用相同,因为参数可以是库或目标的路径。r

您不应在其中一个目标上使用
find\u library
,请删除以下行:

find_library(mylib NAMES mylib PATHS ${archives})
CMake已经知道
mylib
库,因为它是它的目标之一,调用
find\u library
会隐藏
mylib
变量

您可以保持对
target\u link\u库的调用相同,因为参数可以是库的路径,也可以是目标。r