关于CMake的诡异问题!!!
现有一个庞大的工程,自带编译系统可以编译,现在需要使用CMake完成编译库和编译出测试库的可执行文件。库需要编译dll的debug&release和static的debug&release版本。现在库都编译完了,完全没有问题,但是现在我编的测试程序出了问题。
Win32与Win64位系统下头文件和源文件完全相同,只是编译选项不同,生成库的编译选项如下:
if( CIP_64BIT )
set( CMAKE_CXX_FLAGS "/D_MBCS /GS /EHsc /W3 /nologo /c /Wp64 /GR /fp:fast /DCIP_FRAMEWORK_VERSION=0x01050100 /DWIN64")
else( CIP_64BIT )
set( CMAKE_CXX_FLAGS "/D_MBCS /GS /EHsc /W3 /nologo /c /Wp64 /GR /fp:fast /DCIP_FRAMEWORK_VERSION=0x01050100 /DWIN32")
endif( CIP_64BIT )
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} /D_DEBUG /MDd /RTC1 /Z7 /Od")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /DNDEBUG /MD /O2")
这个库有三个测试程序,如下:
+--------------+--------------+---------------+---------------+
| 测试程序 | libAtest | libA-mttest | libA-pltest |
+--------------+--------------+---------------+---------------+
| 加入的特殊宏 | 无 | MT_TEST | PL_TEST |
+--------------+--------------+---------------+---------------+
libAtest与其他两个唯一的区别在于编译时分别加入了名为MT_TEST和PL_TEST的宏。使用的语句如下:
set_source_files_properties( ${SRCS_TEST_LIBA} PROPERTIES COMPILE_FLAGS "-D_LINK_OTHER_DLL -DCIP_MT_TEST" )
(说这么复杂,估计看的人都费劲)
问题在于:
Win32平台下编译出来的测试唯独libA-mttest出了问题(包括四个版本的测试dll&static下debug&release),有两个错误(应该是0 error)。
Win64平台下是dll&static下的release的libAtest、libA-mttest、libA-pltest都有一个错误。
在工程自带的编译系统下都不存在这些问题。经过互换库的试验后发现问题就出现在测试程序上。此问题不指望能得到准确的解决办法,只希望有cmake经验的前辈能给点建议,指出一些cmake容易出问题的地方。