C++ 我应该只对原始cpp文件使用add_executable(),还是通过add_library()创建库?
我正在学习CMake,我正在努力学习。我的“项目”使用的是JsonCpp“库”,它作为一个.cpp文件和两个.h文件提供。结构如下所示:C++ 我应该只对原始cpp文件使用add_executable(),还是通过add_library()创建库?,c++,cmake,C++,Cmake,我正在学习CMake,我正在努力学习。我的“项目”使用的是JsonCpp“库”,它作为一个.cpp文件和两个.h文件提供。结构如下所示: myProject build/ json/ CMakeLists.txt jsoncpp.cpp include/ json.h json-forward.h CMakeLists.txt main.cpp build/CMakeLi
myProject
build/
json/
CMakeLists.txt
jsoncpp.cpp
include/
json.h
json-forward.h
CMakeLists.txt
main.cpp
build/CMakeLists.txt:
cmake_minimum_required(VERSION 3.6.0)
project(myProject)
add_subdirectory(json)
add_executable(app main.cpp)
target_link_libraries(app PRIVATE json)
# add_executable(app main.cpp json/jsoncpp.cpp json/include/json.h json/include/json-forwards.h)
cmake_minimum_required(VERSION 3.6.0)
add_library(
json
jsoncpp.cpp
include/json.h
include/json-forwards.h
)
target_include_directories(json PUBLIC '${CMAKE_CURRENT_SOURCE_DIR}/include')
json/CMakeLists.txt:
cmake_minimum_required(VERSION 3.6.0)
project(myProject)
add_subdirectory(json)
add_executable(app main.cpp)
target_link_libraries(app PRIVATE json)
# add_executable(app main.cpp json/jsoncpp.cpp json/include/json.h json/include/json-forwards.h)
cmake_minimum_required(VERSION 3.6.0)
add_library(
json
jsoncpp.cpp
include/json.h
include/json-forwards.h
)
target_include_directories(json PUBLIC '${CMAKE_CURRENT_SOURCE_DIR}/include')
只对所有.cpp文件使用add_executable()和使用将jsoncpp转换为静态库然后链接它的目标链接库有什么区别?我应该选择什么方法
接下来让我困惑的是一个目标目录()。使用此功能有什么好处?如果我对它发表评论,然后运行cmake(然后生成文件并启动应用程序),一切都正常。如果我从add_library()中删除“include/json.h”和“include/json forward.h”,一切仍然有效
只对所有.cpp文件使用add_executable()和使用将jsoncpp转换为静态库然后链接它的目标链接库有什么区别?我应该选择什么方法
当您有两个使用相同jsoncpp代码的可执行文件时,需要使用add_library
。在这种情况下,如果您在两个add_executable()
调用中都列出了jsoncpp源代码,那么您必须编译它两次。将它们分组到add_library()
将使其只编译一次,然后链接到两个可执行文件
使用add_library
的另一个原因纯粹是模块的逻辑组合