我有以下目录结构:
├───3rd
│ └───lua // this is git submodule, I can't modify anything here
│ ├───doc
│ └───src
└───cmake
└───lua // CMakeLists.txt for ../../3rd/lua is here
我将外部图书馆拉到我的回购中让我们说lua。在分发中没有cmake支持。我无法使用nmake在windows上构建它。然后我想在我的回购中为lua创建一个CMakeLists.txt
。
我们假设CMakeLists.txt
为./cmake/lua/CMakeLists.txt
中的lua。相对于这个位置,我必须指定前缀为../../3rd/lua/src/
的源,这不是很好
set(SOURCES
../../3rd/lua/src/lapi.c
../../3rd/lua/src/lauxlib.c
../../3rd/lua/src/lbaselib.c
<...>)
add_library(liblua ${SOURCES}).
将../../3rd/lua/src/
放入变量并为每个源文件添加前缀也不是很好。所以我想用${PROJECT_SOURCE_DIR}/../../3rd/lua/src
更改源文件的基本搜索路径。我还想影响include_directories
的基本路径。我认为改变PROJECT_SOURCE_DIR
会这样做,但它根本没有效果。
我使用了CMAKE: Print out all accessible variables in a script中的脚本列出了所有变量,并且所有变量都引用了我改为${PROJECT_SOURCE_DIR}/../../3rd/lua/src
的CMakeLists.txt位置:
set(CMAKE_CURRENT_LIST_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(CMAKE_CURRENT_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(CMAKE_HOME_DIRECTORY C:/dev/lua-external-cmake/3rd/lua/src)
set(CMAKE_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(PROJECT_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)
set(Project_SOURCE_DIR C:/dev/lua-external-cmake/3rd/lua/src)
似乎没有这样的变量,因为这种变化没有效果。我知道改变其中一些是完全错误的。我这样做只是为了找出是否会有任何影响。
那么,如何在cmake中更改包含文件的源搜索位置和基本路径?
答案 0 :(得分:3)
CMake中没有source search path
。但是您可以使用常见的cmake命令轻松“重新绑定”源:
set(SOURCES
lapi.c
lauxlib.c
lbaselib.c
<...>)
set(SOURCES_ABS)
foreach(source ${SOURCES})
list(APPEND SOURCES_ABS ${PROJECT_SOURCE_DIR}/../../3rd/lua/src/${source})
endforeach()
add_library(liblua ${SOURCES_ABS}).