2017-10-14 731 views
0

在设计我CMakeLists,我经常碰到这样那样的错误:“找不到源文件”:调试其中的cmake找了

Cannot find source file: 

    foo.hpp 

Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp 
.hxx .in .txx 

要调试放入系统的问题,我真的想知道哪里的CMake找这个文件!

我可以找到一些关于这个问题的SO问题,但它们总是特定于给定的项目,而不是通用调试解决方案。

+0

它总是如此具体,因为你从字面上必须指定CMake应该在哪里查找你的源文件。 –

+0

是的,但是必须要有“打印此处查找文件的目录列表”,以便我可以看到哪个文件丢失了。 – Lithy

回答

0

当传递到file.hppadd_executable()命令add_library(),CMake的搜索文件:

  • 电流源目录(CMAKE_CURRENT_SOURCE_DIR)下,
  • 当前二进制目录(CMAKE_CURRENT_BINARY_DIR)下。

此外,CMake的是能够检测,如果由当前CMakeLists.txt文件add_custom_command()命令的装置(即,该文件尚不存在,但它会在构建创建生成给定的文件以CMake已知的方式演出)。

+0

例如,在调用'target_link_libraries'时也会发生此错误消息,这种情况下,我想它在图书馆指定的某些目录中查找它,等等。我怎样才能确定我完成了dirs的完整聆听?是不是有一些调试标志cmake得到? – Lithy

+0

如果我确实记得,引用的消息类型不会与'target_link_libraries'发生。通过这个调用,你可能会'找不到-l..'消息,这是由链接器在**构建阶段**生成的。 – Tsyvarev

+0

上次我碰到这个错误,那是因为我正在链接一个接口库,它的target_source被定义为一个相对路径而不是绝对路径。 “foo.cpp”甚至不在我的add_executable命令中,只存在于库的CMakeLists中的target_source调用中。 – Lithy