CMake强制include语句采用#include〈mylib/header.h>形式

3zwtqj6y  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(101)

我目前正在处理一个有不同库的项目,其中一些库文件的名称与STL文件的名称相似/相同。这可能会在以后的时间点上导致混淆。因此,即使通过编写#include<file.h>来包含我的自定义库头文件是很方便的,我还是想重构我的CMake代码,我必须包含我的头文件,如下所示:#include<mylib/file.h> .
我怎么能这样做呢?
下面是我当前设置的一个示例:

CMakeLists.txt
     |
     |- mylib
     |   |- CMakeLists.txt
     |   |- include
     |        |- header1.h
     |        |- header2.h
     |
     |- test
         |- CMakeLists.txt
         |- mylib
              |- header1_test.cpp   
              |- header2_test.cpp

其中,三个CMakeLists.txt分别为:
第一个

svmlkihl

svmlkihl1#

要完成来自Tsyvarev的注解,您需要修改标题位置:

[...]
 |   |- include
 |   |   |- mylib
 |   |   |   |- header1.h
 |   |   |   |- header2.h

顺便说一句,这行字:


# link directories

link_directories(../mylib)

不需要。当您需要链接的库不是CMake项目的一部分,并且位于链接器默认情况下不搜索的不同位置时,应该使用此函数。在这里,您通过add_library创建了库mylib,并且所有内容都在同一个CMake项目下(您有一个根CMakeLists,它添加了2个子目录)。
此外,您不需要复制关键字PRIVATE

target_link_libraries(header2_test PRIVATE mylib gtest_main)

相关问题