将变量与源从 .cmake 文件包含到 CMakeList.txt的正确方法



我有以下CMake问题。

我的项目结构是:

Project
--- libs
------ lib1
---------CmakeLists.txt
------ lib2
---------lib2.cmake
---------file1.c
---------file2.c
--- src
...

在我的lib2.cmake中,我有:

set(LIB2_SOURCES
file1.c
file2.c
)

我想在我的 lib1 中使用${LIB2_SOURCES}CMakeList.txt

include(../lib2/lib2.cmake)
set(LIB1_SOURCES
....
)
add_library(media SHARED ${LIB1_SOURCES} ${LIB2_SOURCES})

但是我收到此错误:

Cannot find source file:
file1.c

如果我更改lib2.cmake并像这样修复路径:

set(LIB2_SOURCES
../lib2/file1.c
../lib2/file2.c
)

它有效。但这对我来说不是一个好方法。

我可以lib2.cmake移动到lib1目录中,但这对我来说也不是一个好方法。

那么处理这个问题的正确方法是什么呢?有没有办法在不丢失路径的情况下包含lib2.cmake

如果要具有不依赖于当前目录的路径,请使用绝对路径:

set(LIB2_SOURCES
${CMAKE_CURRENT_LIST_DIR}/file1.c
${CMAKE_CURRENT_LIST_DIR}/file2.c
)

CMAKE_CURRENT_LIST_DIR是包含当前正在处理的 CMake 文件的目录(在您处理lib2.cmake时,将Project/libs/lib2该文件(。

但是,除了像这样定义源之外,您可能还希望为lib2提供适当的CMakeLists.txt并在其中定义对象库,然后将该对象库添加到media库中。

相关内容

  • 没有找到相关文章

最新更新