我获得了一个C ++项目,它具有以下结构:
/main.cpp
/CMakeLists.cpp
/engine/engine.cpp
/engine/CMakeLists.txt
/utils/utils.cpp
/utils/CMakeLists.txt
在/utils/utils.cpp
中,有一行#include <cuda_runtime.h>
。现在,在我的机器上,此头文件位于/usr/local/cuda-7.0/targets/x86_64-linux/include
。但是如果我在上面CMakeLists.txt
的所有三个中打印出cmake的include目录,请使用:
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "include dir = '${dir}'")
endforeach()
然后它会打印出以下内容:/usr/include
,/usr/local/include
和/usr/local/cuda-7.0/include
。
尽管如此 - 代码编译。为什么是这样?当cmake不在包含文件的搜索目录中时,如何找到它?
现在,我将解释真正的原因,我在问这个问题。我想在我的另一个项目中使用此代码。因此,我在项目中创建了一个目录foo
,并添加了上面的内容。然后我将add_subdirectory(foo)
添加到我的主CMakeLists.txt
文件中。我打印出包含目录,并获得与以前相同的输出。但是,这一次,没有编译。它给了我错误信息:
fatal error: cuda_runtime.h: No such file or directory
有人可以向我解释为什么它可能是以原始形式进行编译,而不是在合并到我的项目时进行编译?