4 cmake
这是我的树目录:
\n\n*common_folder\n \\\n *main1_folder---CMakeLists.txt & file1.c & files2.c\n *\n *main2_folder\n *\n *common_librayX---file_libraryX.c (and header)\n *\n *common_libraryY--file_libraryY.c (and header)\nRun Code Online (Sandbox Code Playgroud)\n\n所以我想做的是模拟以下行:\ngcc -Wall -o MAIN file1.c file2.c file_libraryX.c file_libraryY.c
\n\n这是我尝试使用 CMakeLists.txt 的方法:
\n\ncmake_minimum_required(VERSION 3.0.0)\n#D\xc3\xa9claration du projet\nproject(MAIN1 VERSION 1.0)\n\n#Include headers\nget_filename_component(PARENT_DIR ../ ABSOLUTE)\ninclude_directories(${PARENT_DIR}/commonlibrayX)\ninclude_directories(${PARENT_DIR}/commonlibraryY)\n\nadd_executable(\n MAIN1\n file1.c\n file2.c\n file_libraryX.c\n file_libraryY.c\n)\n\ninstall (TARGETS Project DESTINATION bin)\nRun Code Online (Sandbox Code Playgroud)\n\n当然,我最终得到的错误是找不到文件 file_libraryX.c 和 file_libraryy.c。
\n\n我到处都查过了,我似乎根本不明白如何包含来自与当前 CMakeLists.txt 不同目录的库(而不是标头)。在我的例子中是父目录。
\n\n另外,我在树目录中没有将 CMakeLists.txt 放在更高级别的原因是因为我想在每个主文件夹中创建不同的二进制文件,而不必重写 CMakeLists.txt。他们碰巧共享公共库。
\n\n有人可以帮我吗?
\n现代 CMake 方法是:
common_folder/CMakeLists.txtcmake_minimum_required(VERSION 3.0.0)
project(MAIN1 VERSION 1.0)
add_subdirectory(common_librayX)
add_subdirectory(common_librayY)
add_subdirectory(main1_folder)
Run Code Online (Sandbox Code Playgroud)
common_folder/common_librayX/CMakeLists.txtadd_library(LIBX STATIC file_libraryX.c)
target_include_directories(LIBX PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)
common_folder/common_librayY/CMakeLists.txtadd_library(LIBY STATIC file_libraryY.c)
target_include_directories(LIBY PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)
common_folder/main1_folder/CMakeLists.txtadd_executable(MAIN1 file1.c file2.c)
target_link_libraries(MAIN1 PRIVATE LIBX LIBY)
Run Code Online (Sandbox Code Playgroud)
构建项目:
mkdir build
cd build
cmake ..
cmake --build .
Run Code Online (Sandbox Code Playgroud)