2016-07-27 42 views

回答

1

可以在add_executable()addlibrary()列出目标文件一起来源:

add_executable(myProgram 
    source.cpp 
    object.o 
) 

的唯一的事情是,你需要使用add_custom_command生成目标文件,所以CMake的就知道从哪里得到他们。这也将确保您的目标文件在链接myProgram之前生成。

+0

我试过这个,但它不起作用!我做了一个详细的cmake,并且在链接过程中根本没有提到目标文件!我使用$ {CMAKE_CURRENT_SOURCE_DIR} /libs/objectfile.o提供完整路径 – mkmostafa

+0

在您运行CMake的时刻它是否存在? – arrowd

+0

我找到了解决方案。这与您仅在小改编时提出的建议类似。 :) – mkmostafa

2
SET(OBJS 
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o 
) 


SET_SOURCE_FILES_PROPERTIES(
    ${OBJS} 
    PROPERTIES 
    EXTERNAL_OBJECT true 
    GENERATED true 
) 

这对我有效。显然,必须设置这两个变量EXTERNAL_OBJECT,GENERATED

+1

代码片段缺少将'add_executable()'调用作为其参数之一的对象文件。它迷惑了一些读者,像这样:https://stackoverflow.com/questions/48209751/cmake-mingw-compiler-flag-finstrument-functions。 – Tsyvarev

2

我已经在我的项目做到了这一点与target_link_libraries()

target_link_libraries(
    myProgram 
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o 
) 

target_link_libraries()任何完整路径被假定为被转发到连接器的文件。

+0

这是假设我试图链接一个库,而不是一个普通的.o文件,当我尝试这个。 –

+0

@DEEval是的,你需要知道CMake在这里做什么,这是这种方法的丑陋的一部分。我认为这也与你的个人品味有关:外部对象文件是更多的“源文件”还是“与文件链接的东西”。 – Florian

相关问题