我有以下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
库中。