我从以下目录结构开始:
project
exec
executable.exe
lib
src
include
config
<cmake-generated config file>
我使用lib/src
文件夹中的CMakefile在lib/src
文件夹中创建了库。 exe会编译。
然后,我将我的CMakeFile移动到/lib
,确保将源文件路径更改为/src/*
现在,当我尝试编译时,我的所有库都可以编译和链接,但是当我尝试链接可执行文件时,我得到/usr/bin/ld: cannot find -lconfig
。
有谁知道为什么会发生这种情况或如何解决?
以下是我的一些代码:
./CMakeLists.txt:
include_directories(config)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
ADD_SUBDIRECTORY(libs) #library sources
ADD_SUBDIRECTORY(exec) #executable sources
CONFIGURE_FILE(${core_SOURCE_DIR}/config/config.h.in
${core_SOURCE_DIR}/config/config.h)
./libs/CMakeLists.txt:
file(GLOB src ...)
file(GLOB header ...)
add_library(lib ${src} ${header})
./exec/CMakeLists:
add_executable(executable executable.cpp)
link_directories(${core_SOURCE_DIR}/lib) #not sure if this is required
target_link_libraries(executable ${lots_of_libs})
lots_of_libs
中的每个库都可以在.a
目录中找到lib
文件
答案 0 :(得分:1)
一个问题,可能不是解决问题,是:
link_directories(${core_SOURCE_DIR}/lib) #not sure if this is required
应该是:
link_directories(${PROJECT_BINARY_DIR}/lib)
或:
link_directories(${LIBRARY_OUTPUT_PATH})
无论如何,通常你不需要在你的link_directories中添加项目中构建的库的路径,即使你已经指定了不同的LIBRARY_OUTPUT_PATH