cmake,我可以从可执行对象构建库吗 我有一个C++/P>的C++项目构建 add_executable(app foo.cpp bar.cpp main.cpp)

cmake,我可以从可执行对象构建库吗 我有一个C++/P>的C++项目构建 add_executable(app foo.cpp bar.cpp main.cpp),c++,cmake,static-linking,C++,Cmake,Static Linking,我想在测试项目中使用foo.cpp和bar.cpp 我知道我可以建立一个库,然后将它链接到两个项目中: 比如: 但是我不希望更改应用程序构建系统,并针对对象foo.o和bar.o链接test 你知道我如何用cmake做到这一点吗?序言:你不能链接到一个可执行文件,所以你必须改变你构建东西的方式 评论中提出的一些解决方案是有风险的。不要直接链接到对象文件,当您更改任何内容时,在尝试查找对象文件的最终位置时,您会非常痛苦。cmake旨在简化这类事情,一般建议是为您的项目使用正确的体系结构 提议的解决

我想在测试项目中使用
foo.cpp
bar.cpp

我知道我可以建立一个库,然后将它链接到两个项目中: 比如:

但是我不希望更改应用程序构建系统,并针对对象
foo.o
bar.o
链接
test


你知道我如何用cmake做到这一点吗?

序言:你不能链接到一个可执行文件,所以你必须改变你构建东西的方式

评论中提出的一些解决方案是有风险的。不要直接链接到对象文件,当您更改任何内容时,在尝试查找对象文件的最终位置时,您会非常痛苦。cmake旨在简化这类事情,一般建议是为您的项目使用正确的体系结构

提议的解决办法:

  • 只需将您的foobar库设置为静态库
    add_库(foobar static foo.cpp bar.cpp)
    ,并保留您在开始时提出的代码
  • 或者,看看sakra提案(),这很好
标题的意思是“cmake”吗?您可以在另一次“测试”时构建.cpp文件。对我来说比试图重用对象文件更干净。@olivelarouille,如果您从一个源构建应用程序并进行测试,您可以使用变量CMAKE_BINARY_DIR并使用对象文件的相对路径:${CMAKE_BINARY_DIR}/Project/ObjectFiles/foo.oTake查看。序言:您不能链接到可执行文件,所以你必须改变你建造东西的方式。这里提出的一些解决方案是有风险的。只需将您的foobar库设置为静态库
add_库(foobar static foo.cpp bar.cpp)
,并保留您在开始时提出的代码。不要直接链接到对象文件,当您更改任何内容时,您将非常痛苦地试图找到对象文件的最终位置,cmake旨在简化这类事情,为您的项目使用正确的体系结构!看看sakra的提议,这很好。
add_library(foobar foo.cpp bar.cpp)

add_executable(app main.cpp)
target_link_library(app foobar)

add_executable(test test.cpp)
target_link_library(test foobar)