我想借助CMAKE将一些MSVC项目移植到Linux。 在其中一个库项目中,有一些函数只是声明的,并没有在任何地方定义或在任何地方使用。 为前:如何解决未定义的引用时,他们不使用GCC和CMAKE
int fun_a();
int fun_unsed() /*This function is never used in project*/
{
fun_a();
}
现在,当我尝试做制作在Linux中,我观察未定义参考声明的函数。但是相同的代码在MSVC上使用相同的CMAKE文件。
我试图在我的CMAKE文件中使用下面的标志(来自here),但似乎没有帮助。
SET(GCC_COVERAGE_COMPILE_FLAGS “-unresolved符号=忽略所有”) SET(GCC_COVERAGE_LINK_FLAGS “-unresolved符号=忽略所有”)
SET(CMAKE_CXX_FLAGS “$ {CMAKE_CXX_FLAGS} $ {GCC_COVERAGE_COMPILE_FLAGS}” ) SET(CMAKE_EXE_LINKER_FLAGS“$ {CMAKE_EXE_LINKER_FLAGS} $ {GCC_COVERAGE_LINK_FLAGS}”)
我错过了什么?
下面是可执行
#Add Library Projects to the test application
add_subdirectory ("${PROJECT_BINARY_DIR}/../../src/build/vc/" "${PROJECT_BINARY_DIR}/../../src/build/vc/")
#set additional search paths for libraries
#set(CMAKE_LIBRARY_PATH ${PROJECT_BINARY_DIR}/../../lib/Debug)
link_directories(${PROJECT_BINARY_DIR}/../../lib ${OPENCV_BUILD}/lib)
#set ignore undefined & unused functions errors. It seems GCC by defalt looks for them.
SET(GCC_COVERAGE_LINK_FLAGS "-unresolved-symbols=ignore-all")
SET(GCC_COVERAGE_COMPILE_FLAGS "-ffunction-sections")
SET(GCC_COVERAGE_LINK_FLAGS "-Wl,-gc-sections -flto")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
#Get the exicutable for source files
add_executable (FaceAnalysis ${sources})
target_link_libraries (FaceAnalysis faceDetect.a libopencv_core.so libopencv_imgproc.so libopencv_imgcodecs.so libopencv_videoio.so libopencv_objdetect.so libopencv_highgui.so libopencv_video.so libopencv_ml.so SDL2)
add_dependencies(FaceAnalysis faceDetect)
显示精确的'CMakeLists.txt'。有一些关于设置* CMAKE_CXX_FLAGS *的具体内容。另外,运行构建过程'make V = 1',使用该选项,您可以看到用于编译和链接的完整命令行。 – Tsyvarev
@Tsyvarev添加了CMakeLists.txt文件,使V = 1不提供任何额外的信息 – Rama
对不起,我的意思是'使VERBOSE = 1'。你的'CMakeLists.txt'的内容看起来很合理,除了:1.你设置了* GCC_COVERAGE_LINK_FLAGS *变量**两次**,所以第二个任务将覆盖第一个。 2.在第一次赋值时,它应该是值的开始处的附加短划线:'--unresolved-symbols = ...'。 – Tsyvarev