CMAKE:从父目录链接库
这是我的目录树:CMAKE:从父目录链接库,cmake,Cmake,这是我的目录树: *common_folder \ *main1_folder---CMakeLists.txt & file1.c & files2.c * *main2_folder * *common_librayX---file_libraryX.c (and header) * *common_libraryY--file_libraryY.c (and header) 所以我要做的是模拟下面这行: gcc-Wall-o主文件1.c文件2
*common_folder
\
*main1_folder---CMakeLists.txt & file1.c & files2.c
*
*main2_folder
*
*common_librayX---file_libraryX.c (and header)
*
*common_libraryY--file_libraryY.c (and header)
所以我要做的是模拟下面这行:
gcc-Wall-o主文件1.c文件2.c文件\u libraryX.c文件\u libraryY.c
下面是我如何尝试使用我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0)
#Déclaration du projet
project(MAIN1 VERSION 1.0)
#Include headers
get_filename_component(PARENT_DIR ../ ABSOLUTE)
include_directories(${PARENT_DIR}/commonlibrayX)
include_directories(${PARENT_DIR}/commonlibraryY)
add_executable(
MAIN1
file1.c
file2.c
file_libraryX.c
file_libraryY.c
)
install (TARGETS Project DESTINATION bin)
当然,我最终的错误是它找不到文件\u libraryX.c和文件\u libraryy.c
我到处都查过了,但我似乎一点也不明白如何包含来自不同目录的库(而不是标题),而不是当前的CMakeLists.txt目录。在我的例子中,是父目录 另外,我没有在树目录中的更高级别使用CMakeLists.txt的原因是,我希望在每个主文件夹中创建不同的二进制文件,而不必重写CMakeLists.txt。他们碰巧共享公共图书馆
有人能帮我吗?现代的CMake方法是:
common_文件夹/CMakeLists.txt
common\u文件夹/common\u库/CMakeLists.txt
common_folder/common_librayY/CMakeLists.txt
common\u folder/main1\u folder/CMakeLists.txt
建设项目:
mkdir build
cd build
cmake ..
cmake --build .
现代CMake方法将是:
common_文件夹/CMakeLists.txt
common\u文件夹/common\u库/CMakeLists.txt
common_folder/common_librayY/CMakeLists.txt
common\u folder/main1\u folder/CMakeLists.txt
建设项目:
mkdir build
cd build
cmake ..
cmake --build .
“如何包含来自不同目录的库(而不是标题),而不是当前目录的CMakeLists.txt。”-只需在
add\u executable
命令中指定库文件的绝对路径:${PARENT\u DIR}/commonlibrayX/file\u libraryX.c
,${PARENT\u DIR}/CommonLibrary/file\u library.c
。非常感谢您的帮助!我原以为我需要做一些更复杂的事情,比如在每个文件夹中编写CMakeLists.txt,但我尝试了却没有成功。你知道怎么做吗?“如何包含来自不同目录的库(而不是标题),而不是当前的CMakeLists.txt。”-只需在add_executable
命令中指定库文件的绝对路径:${PARENT_DIR}/commonlibrayX/file_libraryX.c
,${PARENT_DIR}/CommonLibrary/file\u library.c
。非常感谢您的帮助!我原以为我需要做一些更复杂的事情,比如在每个文件夹中编写CMakeLists.txt,但我尝试了却没有成功。你知道怎么做吗?
add_library(LIBY STATIC file_libraryY.c)
target_include_directories(LIBY PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
add_executable(MAIN1 file1.c file2.c)
target_link_libraries(MAIN1 PRIVATE LIBX LIBY)
mkdir build
cd build
cmake ..
cmake --build .